无法从 docker-compose 连接到 docker

Posted

技术标签:

【中文标题】无法从 docker-compose 连接到 docker【英文标题】:Can't connect to docker from docker-compose 【发布时间】:2015-05-19 23:55:27 【问题描述】:

我在 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   

但是无法从 docker-compose 连接。

$ docker-compose up

无法通过 http+unix://var/run/docker.sock 连接到 Docker 守护程序 - 它正在运行吗?

如果它位于非标准位置,请使用 DOCKER_HOST 环境变量指定 URL。

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

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

docker-compose.yml

web:
  build: .

为什么无法连接?有什么想法吗?

【问题讨论】:

docker-machine 是否以 root 身份运行?我刚刚在 Ubuntu 上遇到同样的问题,这是套接字上的权限 - sudo 成功了。 Linux 用户可以just need to be added to the docker group。 只需运行:sudo docker-compose up 我遇到了同样的问题。您需要重新启动 docker。 sudo service docker restartsudo service docker start 我用这个解决了。 对于那些使用 Ubuntu 的用户,您应该使用 sudo 并且您不应该将用户添加到 docker 组。查看已接受答案中的 cmets:askubuntu.com/questions/477551/… 【参考方案1】:

对我来说简单的解决方案: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
~ > 

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

须藤?不!

厌倦了每次发出命令时都输入 sudo docker?是的,那里 是一种处理方式。虽然自然 docker 是需要一个 root 用户,我们可以为 docker 操作提供一个 root 等效组。

您可以创建一个名为 docker 的组,然后将所需的用户添加到该组 团体。重启docker服务后,用户无需输入 sudo 每次做 docker 操作。它在贝壳上的样子 命令?作为一个根,你去:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

完成!

2017 年 3 月 9 日更新

Docker安装instructions have been updated here.

Linux 的安装后步骤

本部分包含配置 Linux 主机以更好地与 Docker 配合使用的可选过程。

以非 root 用户身份管理 Docker

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

如果您在使用 docker 命令时不想使用 sudo,请创建一个名为 docker 的 Unix 组并将用户添加到其中。当 docker daemon 启动时,它使 Unix 套接字的所有权可以被 docker 组读/写。

创建 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

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

【讨论】:

同样由于某种原因 sudo 是让它工作的唯一方法 :O :O :O 您可以使用命令:newgrp docker 而不是注销... 啊,子问题的详细答案:-) 回复:“我的简单解决方案:sudo docker-compose up”。当我尝试这样做时,我得到:sudo: docker-compose: command not found 感谢@ThiagoFalcao 在这里提供 newgrp。【参考方案2】:

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

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

【讨论】:

您可以将该命令 (eval "$(docker-machine env default)") 放入您的 bin/postactivate 以确保它始终是最新的。 在哪里可以找到 bin/postactivate 文件? 或者你忘了安装docker:$ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker【参考方案3】:

如果您使用 sudo 启动 docker,那么您应该使用 sudo 运行 docker-compose up 点赞:sudo docker-compose up

【讨论】:

当我运行 sudo docker-compose build 而不是 docker-compose build 时,它对我有用。【参考方案4】:

我在 Ubuntu 20.0.4 中通过

解决了这个问题
sudo chmod 666 /var/run/docker.sock

然后

sudo service docker start && docker-compose up -d

Ref.

【讨论】:

错误答案。做更多的研究。您正在让每个人都可以访问套接字。 askubuntu.com/questions/477551/… @LiveWireBT 这是解决方案,已经解决了问题。可以解释一下这里的最佳做法是什么? 非常感谢。我开始拔头发 这解决了我的问题是 666 对套接字来说是件坏事吗? 这解决了我的问题,谢谢【参考方案5】:

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

如果您在使用 docker 命令时不想使用 sudo,请创建一个名为 docker 的 Unix 组并将用户添加到其中。当 docker daemon 启动时,它使 Unix 套接字的所有权可以被 docker 组读/写。

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

    创建 docker 组。

    $ sudo groupadd docker

    将您的用户添加到 docker 组。

    $ sudo usermod -aG docker $USER

    退出并重新登录,以便重新评估您的群组成员资格。

    验证您可以在没有 sudo 的情况下使用 docker 命令。

    $ docker run hello-world

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

上述步骤来自official Docker documentation。

【讨论】:

我们如何在 Windows 安装的 Docker 上做到这一点? 除此之外,我修复 docker-compose 的方法是将执行 docker-compose 的用户设置为 /usr/local/bin/docker-compose 的所有者,然后重新启动服务 group 会员可以用su - $USER 刷新以节省注销和注销【参考方案6】:

当您收到错误时:

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

解决方案是:

    首先,尝试在远程/本地机器上验证 Docker 服务已启动并运行sudo service docker status

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

    其次,启动docker as sudo sudo docker-compose up

【讨论】:

【参考方案7】:

sudo systemctl start docker - 启动 Docker 服务。

sudo docker-compose up 之后。

我有 Fedora 26,为了解决同样的问题,我最终输入了Docker Compose on Fedora Developers' page,然后输入了Docker on Fedora Developers' page,这对我有帮助。

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

Fedora Developers' page 上有说明如何使 Docker 随系统启动:

sudo systemctl enable docker

【讨论】:

如果您在 mac 上运行,请将 systemctl 替换为 launchctl【参考方案8】:

解决这个问题的快速方法

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


sudo docker-compose up

【讨论】:

【参考方案9】:

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

【讨论】:

在 Ubuntu 20.0 上工作。谢谢【参考方案10】:

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

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

安装后,重试运行docker-compose up,然后再尝试上面列出的任何操作。

希望这对某人有所帮助。这适用于我在 Fedora 25 中安装的 devilbox。

【讨论】:

【参考方案11】:

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

在你的情况下,试试:$ sudo docker-compose up

【讨论】:

【参考方案12】:

有人检查过日志吗?

在我的情况下,/var/log/upstart/docker.log 中的错误消息是:

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

值得一提的是,我打开了 ***,所以: $ sudo service open*** stop $ sudo service docker restart $ docker-compose up|start $ sudo service open*** start 是解决方案。

【讨论】:

是的,我也是这样,但如果有人不喜欢这个解决方案,这里还有一些不需要停止/重新启动 *** 服务的其他解决方案:***.com/questions/43720339/… 【参考方案13】:

如果您使用的是 docker-machine,那么您必须使用 env 变量来激活环境。 如果你没有使用 docker-machine 然后用 sudo

运行你的命令

【讨论】:

【参考方案14】:

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

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"

【讨论】:

【参考方案15】:

可能存在权限问题,以下命令对我有用。

sudo chown $USER /var/run/docker.sock

感谢 Max 的解决方案:https://***.com/posts/60282354/revisions

【讨论】:

【参考方案16】:

如果你使用的是 linux

试试sudo docker-compose up

【讨论】:

【参考方案17】:

@srfrnk 的回答对我有用。

在我的情况下,我有下一个 docker-compose.yml 文件:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtime 所有者和组 - 是 root 当其他文件所有者 - 我的用户。 当我尝试构建nginx

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

我将./docker-runtime 添加到.dockerignore 并解决了我的问题。

【讨论】:

【参考方案18】:

在运行 docker-compose pull 时 - 我遇到了错误

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

它正在运行吗?

解决方案 -

sudo service docker start 

问题已解决

【讨论】:

【参考方案19】:
1 . sudo service docker stop 
2 . sudo service docker status
3 . sudo service docker start
4 . docker-compose build <app_name\service_name>

【讨论】:

步骤 1-3 然后docker-compose pull 也为我工作。【参考方案20】:

我也有同样的症状。

仅在 docker-compose build 期间发生的差异 docker ps 工作。 发生在版本 2.x3.x 上。 重启docker服务,然后机器... 偶重装docker+docker-compose

尝试了一切,但没有任何帮助。

最后我尝试使用docker build“手动”构建 Dockerfile。

显然我在Docker 上下文中的文件/文件夹上遇到了权限问题。它在开始构建时尝试读取上下文并失败并显示正确的错误消息。 但是,此错误消息没有传播到 docker-compose,它只显示 Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

发现解决方案只是将文件/文件夹添加到 .dockerignore 文件中,因为构建不需要它。另一个解决方案可能是chownchmod

无论如何,这可能有助于遇到与docker 和显示的误导性错误消息无关的相同问题。

【讨论】:

我遇到了同样的问题:挂载卷中的文件权限。就我而言,我有一个由 root 拥有的 SSL 证书,该证书已放入 Docker 卷中。 chown / chmod 已修复。可怕的错误信息,但他们正在努力。见github.com/docker/compose/issues/5318【参考方案21】:

$sudo docker-compose up

我确实按照上述答案中的步骤将 $USER 添加到组 docker。我不想添加一个新组 docker,因为在我的 docker 安装中,自动创建了一个名为 docker 的组。

Docker CE is installed and running. The docker group is created but no users are added to it. You need to use sudo to run Docker commands. Continue to Linux postinstall to allow non-privileged users to run Docker commands and for other optional configuration steps.

但使用 docker-compose up 也不起作用。它给出了相同的先前错误。 所以在我的情况下(Ubuntu 18.10) sudo docker-compose up 解决了这个问题。

ps:@Tiw 感谢您的建议。

【讨论】:

也许最好把解决方案放在第一位,然后在下面解释。您也可以使用编辑器上的这些按钮来更好地格式化您的答案。【参考方案22】:

试试这个:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

【讨论】:

【参考方案23】:

我已经使用以下步骤解决了这个问题

$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up

现在 docker-compose up 正在工作

【讨论】:

【参考方案24】:

注销然后再次登录对我有帮助。在我的情况下,它是全新安装,我创建了一个新用户、新组,然后将该用户添加到 docker 组。

退出 退出

然后再次 ssh 进入服务器

【讨论】:

【参考方案25】:

工作!! 我尝试了以下命令及其工作

service docker restart
docker-compose -f docker_compose.yaml down
docker-compose -f docker_compose.yaml up

【讨论】:

【参考方案26】:

对我来说,我开始升级 Docker 并中途取消。我没有注意到 Docker 没有运行(如果是,我的 Macbook 顶部导航栏有一个图标,显示剩余电池电量、时间等)。一旦我启动它并完成升级,docker-compose up 又可以工作了!

【讨论】:

【参考方案27】:

我的设置有两种情况出现此错误:

__pycache__ 在容器内运行集成测试后由 root 用户创建的文件对于 docker(告诉您原始问题)和 docker-compose(含糊不清地告诉您有关 docker host)是不可访问的; microk8s 阻止了我的端口,直到我停止它。

【讨论】:

【参考方案28】:

如果需要先运行dockerdsudo dockerd 来启动守护程序,请尝试运行。如果您以sudo 开头dockerd,您可能还希望以sudo 运行docker-compose up。否则没关系。

来自https://github.com/docker/compose/issues/4181的工作解决方案

【讨论】:

【参考方案29】:

以下内容对我有用,我不确定是哪一部分成功了:

julian:project$ sudo service docker status
julian:varys$ sudo service docker status                                                                                                                                                                                
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

julian:project$ sudo service docker restart  

【讨论】:

【参考方案30】:

尝试使用以下命令重新启动您的 docker 环境:

systemctl restart docker

【讨论】:

以上是关于无法从 docker-compose 连接到 docker的主要内容,如果未能解决你的问题,请参考以下文章

无法从 docker-compose 文件中定义的另一个服务连接到 nsqd

为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务

Traefik无法通过docker-compose连接到服务器。

连接到本地 docker-compose 容器 Windows 10

docker-compose 有两个容器:web 无法连接到 db

构建 docker-compose 映像时无法连接到 MySQL