无法从docker-compose连接到docker

时间:2015-03-17 13:59:56

标签: 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   

但无法从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: .

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

29 个答案:

答案 0 :(得分:135)

对我来说简单的解决方案: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?是的,那里   是一种解决这个问题的方法。虽然天然码头需要一个   root用户,我们可以为docker操作提供一个root-equivalent组。

     

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

> 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守护程序启动时,它会使docker组对Unix套接字的所有权进行读/写。

要创建泊坞窗组并添加您的用户:

# 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

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

答案 1 :(得分:77)

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

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

答案 2 :(得分:15)

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

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

要创建泊坞窗组并添加您的用户:

  1. 创建泊坞窗组。

    $ sudo groupadd docker

  2. 将您的用户添加到泊坞窗组。

    $ sudo usermod -aG docker $USER

  3. 退出并重新登录,以便重新评估您的论坛成员资格。

  4. 确认您可以在没有sudo的情况下停靠命令。

    $ docker run hello-world

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

    上述步骤来自official Docker documentation

答案 3 :(得分:13)

如果您使用sudo启动了泊坞广告,那么您应该使用sudo运行docker-compose 喜欢:sudo docker-compose up

答案 4 :(得分:7)

sudo systemctl start docker   - 启动Docker服务。

之后

sudo docker-compose up

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

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

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

sudo systemctl enable docker

答案 5 :(得分:6)

如果您使用的是Linux,则可能未安装<button onclick="show()"> Show me! </button> function show() { console.log("function called") var chart; var chartData = [{ "ax": 1, "ay": 0.5, "bx": 1, "by": 2.2 }, { // ... }); } ,因为它仅在Windows和Mac计算机上默认安装。

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

安装完成后,在尝试上面列出的任何内容之前重试docker-machine

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

答案 6 :(得分:6)

我在Ubuntu 20.0.4中通过以下方式解决了该问题

sudo chmod 666 /var/run/docker.sock

然后

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

Ref.

答案 7 :(得分:4)

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

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

答案 8 :(得分:4)

解决这个问题的快速方法

<块引用>

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


sudo docker-compose up

答案 9 :(得分:3)

来自@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,这解决了我的问题。

答案 10 :(得分:3)

1 . sudo service docker stop 
2 . sudo service docker status
3 . sudo service docker start
4 . docker-compose build <app_name\service_name>

答案 11 :(得分:3)

出现错误时:

  

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

解决方案是:

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

    如果不是-运行sudo service docker startsudo systemctl start docker(取决于某些Linux版本)。

  2. 第二,以sudo身份启动docker sudo docker-compose up

答案 12 :(得分:2)

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

运行你的命令

答案 13 :(得分:2)

我有相同的症状。

仅在docker-compose build期间发生的差异 docker ps工作了。 发生了版本2.x以及3.x。 重新启动docker服务,然后是机器...... 甚至重新安装了docker + docker-compose

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

最后我尝试构建Dockerfile&#34;手动&#34;使用docker build

显然我在Docker上下文中的文件/文件夹上有权限问题。它正在尝试在启动构建时读取上下文,并且失败并显示正确的错误消息。 但是,此错误消息传播到仅显示docker-compose的{​​{1}}

发现解决方案只是将文件/文件夹添加到Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?文件中,因为构建不需要它。另一种解决方案可能是.dockerignorechown

无论如何,这可能会帮助遇到与chmod无关的同一问题的人以及显示的误导性错误消息。

答案 14 :(得分:2)

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

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

答案 15 :(得分:2)

有人检查过日志吗?

我的案例/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 是解决方案。

答案 16 :(得分:1)

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

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

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

答案 17 :(得分:1)

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

systemctl restart docker

答案 18 :(得分:1)

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

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

答案 19 :(得分:1)

注销然后再次登录对我有帮助。就我而言,这是全新安装,我创建了一个新用户,新组然后将该用户添加到了docker组。

退出 退出

然后再次SSH进入服务器

答案 20 :(得分:1)

我已按照以下步骤解决了该问题

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

现在docker-compose up正在工作

答案 21 :(得分:0)

以下内容对我有用,我不确定是什么原因完成的:

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  

答案 22 :(得分:0)

尝试首先运行dockerdsudo dockerd以启动守护程序。如果您以dockerd开始sudo,则可能也要以docker-compose up运行sudo。否则很好。

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

答案 23 :(得分:0)

我的设置有两种情况可解决此错误:

  • __pycache__由root用户在容器内运行集成测试后创建的文件对于docker(告诉您原始问题)和docker-compose(告诉您有关docker主机的模棱两可)无法访问;
  • microk8s阻止了我的端口,直到我停止它为止。

答案 24 :(得分:0)

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

  

错误:无法通过http + docker:// localhost

连接到Docker守护程序

它在运行吗?

解决方案-

sudo service docker start 

问题已解决

答案 25 :(得分:0)

尝试一下:

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

答案 26 :(得分:0)

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

答案 27 :(得分:0)

以根用户身份运行它。 sudo docker-compose up --build

答案 28 :(得分:0)

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