无法从docker-compose连接到docker


163

我在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在这里。

Docker文件

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

docker-compose.yml

web:
  build: .

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


49
是否docker-machine以root身份运行?我只是在Ubuntu上遇到了同样的问题,这是套接字上的权限- sudo做到了。
SLD 2015年

7
对于Linux上的用户,可能只需要将其添加到docker group即可
Batandwa

5
只需运行:sudo docker-compose up
Girish Gupta

我遇到过同样的问题。您需要重新启动docker。sudo service docker restart或者sudo service docker start我用这个解决了。
OM Bharatiya

对于使用Ubuntu的用户,应使用sudo,并且不应将用户添加到docker组。查看接受的答案的评论:askubuntu.com/questions/477551/...
卡斯

Answers:


89

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

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


2
您可以将该命令(eval "$(docker-machine env default)")放在bin / postactivate中,以确保它始终是最新的。
丹妮德

1
在哪里可以找到bin / postactivate文件?
卢卡斯·舒尔茨

或者您忘记安装docker: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS

226

对我来说简单的解决方案: 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服务后,用户无需在每次执行docker操作时都键入sudo。在shell命令上看起来如何?作为根,您可以在这里:

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

做完了!

更新2017-3-9

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

Linux的安装后步骤

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

以非root用户身份管理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

此命令下载测试图像并在容器中运行。容器运行时,它会打印参考消息并退出。


1
同样由于某些原因,sudo是使它工作的唯一途径:O:O:O
Jamie Hutber

12
除了注销外,您还可以使用以下命令:newgrp docker
Thiago Falcao

啊,有子问题的详细回答:-)
Sukumaar

1
回复:“对我来说简单的解决方案:sudo docker-compose up”。当我尝试这样做时,我得到:sudo: docker-compose: command not found
mblakesley,

38

如果您使用来启动docker sudo,则应使用sudo Like 运行docker-compose up :sudo docker-compose up


当我跑步sudo docker-compose build而不是跑步时,它对我有用docker-compose build
anms_pro

26

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

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

要创建docker组并添加用户:

  1. 创建泊坞窗组。

    $ sudo groupadd docker

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

    $ sudo usermod -aG docker $USER

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

  4. 确认您可以在没有sudo的情况下使用docker命令。

    $ docker run hello-world

此命令下载测试图像并在容器中运行。容器运行时,它会打印参考消息并退出。

上面概述的步骤来自官方Docker文档


我们如何在Windows安装的Docker上执行此操作?
杰夫·库克

除此之外,我要修复docker-compose的工作是将执行的用户设置为该用户docker-compose的所有者,/usr/local/bin/docker-compose然后重新启动服务
Sam

group可以通过刷新会员资格su - $USER来保存注销和注销
Stuart Cardall

19

当您遇到错误时

错误:无法通过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


16

sudo systemctl start docker -启动Docker服务。

sudo docker-compose up 之后。

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

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

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

sudo systemctl enable docker


如果您在Mac上运行,请替换systemctllaunchctl
罗希特·斯瓦米

6

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

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

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

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


5

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

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

4

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


3

有人检查过日志吗?

就我而言,错误消息/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 解决方案。


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


3

运行时docker-compose pull-我低于错误

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

它在运行吗?

解决方案-

sudo service docker start 

问题解决了


2

我有相同的症状。

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

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

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

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

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

无论如何,这可能会帮助遇到与该问题完全无关的同一问题的人,docker并且会显示误导性的错误消息。


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

2

$ sudo docker-compose up

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

Docker CE已安装并正在运行。docker组已创建,但未添加任何用户。您需要使用sudo运行Docker命令。继续进行Linux后安装,以允许非特权用户运行Docker命令以及其他可选配置步骤。

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

ps:@Tiw感谢您的建议。


1
也许最好将解决方案放在第一位,并在下面进行解释。您也可以使用编辑器上的这些按钮来更好地格式化答案。
Tiw

2

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

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


1

试试这个:

须藤ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose


1

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

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

现在码头工人组成了工作


0

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


0

我的安装程序针对此错误有两种情况:

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



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  
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.