ChatGPT解决这个技术问题 Extra ChatGPT

无法从 docker-compose 连接到 docker

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

码头工人-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 组。查看已接受答案中的评论:askubuntu.com/questions/477551/…

A
Alan Thompson

对我来说简单的解决方案:sudo docker-compose up

更新 2016-3-14:在 docker install 过程(或 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 服务后,用户无需每次执行 docker 操作时都输入 sudo。它在 shell 命令上的外观如何?作为一个根,你去:

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

完毕!

更新 2017-3-9

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

Linux 的安装后步骤

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

以非 root 用户身份管理 Docker

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

如果您在使用 docker 命令时不想使用 sudo,请创建一个名为 docker 的 Unix 组并将用户添加到其中。当 docker 守护进程启动时,它使 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。
A
Andy Shinn

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
R
Rohan Seth

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


当我运行 sudo docker-compose build 而不是 docker-compose build 时,它对我有用。
M
Mohammad Heydari

我通过以下方式解决了 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 对套接字来说是件坏事吗?
这解决了我的问题谢谢
n
ndequeker

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

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

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

创建泊坞窗组。 $ sudo groupadd docker 将您的用户添加到 docker 组。 $ sudo usermod -aG docker $USER 注销并重新登录,以便重新评估您的组成员身份。验证您是否可以在没有 sudo 的情况下使用 docker 命令。 $ docker 运行你好世界

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

上述步骤来自 official Docker documentation


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

当您收到错误时:

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

解决方案是:

首先,尝试验证 Docker 服务是否已在您的远程/本地机器上按预期运行:sudo service docker status if Not - run sudo service docker start 或 sudo systemctl start docker(取决于某些 linux 版本,请参阅 Docker 入门说明)。二、启动docker sudo sudo docker-compose up


A
Aleksei Alefirov

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
h
hamidreza nikoonia

解决这个问题的快速方法

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


sudo docker-compose up


S
S.Kihara

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


在 Ubuntu 20.0 上工作。谢谢
S
Saeed

如果你使用的是 linux

试试sudo docker-compose up


s
specialk1st

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

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

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

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


D
Demobilizer

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

在您的情况下,只需尝试:$ sudo docker-compose up


S
Sławomir Lenart

有人检查过日志吗?

在我的情况下,/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" 

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


是的,我也是这种情况,但如果有人不喜欢这个解决方案,这里还有一些不需要停止/重新启动 vpn 服务的其他解决方案:stackoverflow.com/questions/43720339/…
M
Md Ch

如果您使用的是 docker-machine,那么您必须使用 env 变量激活环境。如果您不使用 docker-machine 然后使用 sudo 运行您的命令


A
Android

运行 docker-compose pull - 我遇到错误

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

它在运行吗?

解决方案 -

sudo service docker start 

问题解决了


S
Shanu Gupta

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

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

c
chirag sanghvi

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

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

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


h
holms

@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 并解决了我的问题。


S
SCouto
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 也为我工作。
s
srfrnk

我也有同样的症状。

只有在 docker-compose build docker ps 期间发生的差异才有效。发生在版本 2.x3.x 上。重新启动 docker 服务,然后机器...甚至重新安装 docker + docker-compose

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

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

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

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

无论如何,也许这可以帮助遇到与 docker 和显示的误导性错误消息无关的相同问题的人。


我遇到了同样的问题:已安装卷中的文件权限。就我而言,我有一个由 root 拥有的 SSL 证书,该证书已放入 Docker 卷中。 chown / chmod 修复了它。可怕的错误信息,但他们正在努力。请参阅github.com/docker/compose/issues/5318
N
Nayananga Muhandiram

$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 感谢您的建议。


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

尝试这个:

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


K
KARTHIKEYAN.A

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

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

现在 docker-compose up 正在工作


S
Swelan Auguste

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

退出 退出

然后再次 ssh 进入服务器


N
Nids Barthwal

在职的!!我尝试使用以下命令及其工作

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

R
Rock Lee

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


s
simno

对于此错误,我的设置有两种情况:

__pycache__ 在我在容器内运行集成测试后由 root 用户创建的文件对于 docker(告诉您原始问题)和 docker-compose(含糊不清地告诉您有关 docker 主机)无法访问;

microk8s 阻止了我的端口,直到我停止它。


G
Gathua Kiragu

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

https://github.com/docker/compose/issues/4181 的有效解决方案


j
juliangonzalez

以下内容对我有用,我不确定哪一部分起到了作用:

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  

4
4b0

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

systemctl restart docker