无法从docker-compose连接到docker

DIG*_*UAD 131 docker docker-compose

我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0.
Docker-machine正常运行,可以通过docker-machine ssh连接.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   
Run Code Online (Sandbox Code Playgroud)

但无法从docker-compose连接.

$ docker-compose up
Run Code Online (Sandbox Code Playgroud)

我的Dockerfile和docker-compose.yml就在这里.

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

web:
  build: .
Run Code Online (Sandbox Code Playgroud)

为什么不能连接?有任何想法吗?

Ala*_*son 176

简单的解决方案: sudo docker-compose up


更新2016-3-14:在docker安装过程(或docker-compose?)的某个时刻,有一个建议和示例将您的用户名添加到"docker"组.这允许您在所有docker命令之前避免需要"sudo",如下所示:

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 
Run Code Online (Sandbox Code Playgroud)

仔细查看安装命令的输出(docker和docker-compose的第二次安装),您将找到必要的步骤.它还记录在这里:https: //subosito.com/posts/docker-tips/

须藤?没有!

厌倦了每次发出命令时输入sudo docker?是的,有办法解决这个问题.虽然自然docker需要root用户,但我们可以为docker操作提供root等效组.

您可以创建一个名为docker的组,然后将所需用户添加到该组.重新启动docker服务后,用户无需在每次执行docker操作时键入sudo.shell命令的外观如何?作为根,你走了:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 
Run Code Online (Sandbox Code Playgroud)

完成!

更新2017-3-9

Docker安装说明已在此处更新.

Linux的安装后步骤

本节包含配置Linux主机以使用Docker更好地工作的可选过程.

以非root用户身份管理Docker

docker守护程序绑定到Unix套接字而不是TCP端口.默认情况下,Unix套接字由用户root拥有,而其他用户只能使用sudo访问它.docker守护程序始终以root用户身份运行.

如果您在使用docker命令时不想使用sudo,请创建一个名为docker的Unix组并向其添加用户.当docker守护程序启动时,它会使docker组对Unix套接字的所有权进行读/写.

要创建docker组并添加您的用户:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world
Run Code Online (Sandbox Code Playgroud)

此命令下载测试映像并在容器中运行它.当容器运行时,它会打印一条信息性消息并退出.

  • 而不是注销...你可以使用命令:`newgrp docker` (5认同)

And*_*inn 81

Docker机器正在运行.但是您需要导出一些环境才能连接到Docker机器.默认情况下,dockerCLI客户端尝试使用http+unix://var/run/docker.sock(如错误消息中所示)与守护程序通信.

使用导出正确的环境变量eval $(docker-machine env dev),然后重试.您也可以运行docker-machine env dev以查看它将导出的环境变量.请注意,其中一个是DOCKER_HOST,正如错误消息建议您可能需要设置.

  • 您可以在bin/postactivate中放置该命令(`eval"$(docker-machine env default)"`)以确保它始终是最新的. (2认同)

Moh*_*ari 32

我在 Ubuntu 20.0.4 中解决了这个问题

sudo chmod 666 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

进而

sudo service docker start && docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

参考

  • 错误的答案。做更多研究。您正在向每个人授予对套接字的访问权限。https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo (4认同)
  • @LiveWireBT 这是解决方案,已经解决了问题。可以解释一下这里的最佳实践是什么吗? (2认同)

avi*_*amg 28

当您收到错误时

错误:无法在 http+docker://localhost 连接到 Docker 守护进程 - 它正在运行吗?

解决方案将是:

  1. 首先,尝试在远程/本地机器上验证Docker 服务是否按预期启动并运行sudo service docker status

    如果不是 - 运行sudo service docker startsudo systemctl start docker(取决于某些 linux 版本,请参阅 Docker入门说明)。

  2. 其次,以sudo身份启动docker sudo docker-compose up


小智 21

如果你开始使用docker sudo,那么你应该使用sudo Like 运行docker-compose :sudo docker-compose up


nde*_*ker 18

默认情况下,docker守护程序始终以root用户身份运行,因此您需要sudo在Docker命令之前添加前缀.

如果您在使用docker命令时不想使用sudo,请创建一个名为docker的Unix组并向其添加用户.当docker守护程序启动时,它会使docker组对Unix套接字的所有权进行读/写.

要创建docker组并添加您的用户:

  1. 创建docker组.

    $ sudo groupadd docker

  2. 将您的用户添加到docker组.

    $ sudo usermod -aG docker $USER

  3. 注销并重新登录,以便重新评估您的组成员身份.

  4. 验证您是否可以在没有sudo的情况下停靠命令.

    $ docker run hello-world

此命令下载测试映像并在容器中运行它.当容器运行时,它会打印一条信息性消息并退出.

上面列出的步骤来自官方Docker文档.


Ale*_*rov 12

sudo systemctl start docker -启动Docker服务。

sudo docker-compose up 之后。

我有Fedora 26,并且试图解决同一问题,最终我在Fedora开发人员页面上进入了Docker Compose,然后在Fedora开发人员页面上进入了Docker,这对我有所帮助。

社区可能认为docker服务总是从系统开始并一直在后台运行,但是对我而言,它并不那么明显,这就是我能想到为什么没有像这样的流行答案的原因。

Fedora开发人员页面上,有说明如何使Docker从系统启动:

sudo systemctl enable docker


小智 9

如果你使用的是linux

尝试sudo docker-compose up


ham*_*nia 9

解决这个问题的快速方法

只需在 docker 命令之前添加 sudo ,例如


sudo docker-compose up

Run Code Online (Sandbox Code Playgroud)


小智 7

以 root 身份运行它。 sudo docker-compose up --build


spe*_*1st 6

如果您使用的是Linux,则可能未docker-machine安装,因为它仅在Windows和Mac计算机上默认安装.

如果需要,您需要访问:https://docs.docker.com/machine/install-machine/以查找有关如何在您的Linux版本上安装它的说明.

安装后,docker-compose up在尝试上面列出的任何内容之前重试运行.

希望这有助于某人.这适用于我在Fedora 25中的devilbox安装.


San*_*noj 5

运行时docker-compose pull- 我遇到以下错误

错误:无法连接到位于 http+docker://localhost 的 Docker 守护进程

它在运行吗?

解决方案 -

sudo service docker start 
Run Code Online (Sandbox Code Playgroud)

问题解决了


Sha*_*pta 5

除了将用户添加到 docker 组之外,为了避免sudo重复输入,您还可以为docker命令创建别名,如下所示:

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"
Run Code Online (Sandbox Code Playgroud)


Dem*_*zer 5

我知道这很愚蠢,但就我而言,我只是尝试了一下sudo,它就像一个魅力。

对于你的情况,只需尝试:$ sudo docker-compose up


Wil*_*eng 5

解决此问题的简单方法:
问题:
在此输入图像描述

解决方案:

sudo chown $USER /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

回答:
在此输入图像描述