不能从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连接到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: .

为什么不能连接?什么好主意吗?

334807 次浏览

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

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

对我来说简单的解决方案: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和amp;第二次安装docker-compose),你会发现必要的步骤。它也记录在这里:https://subosito.com/posts/docker-tips/

Sudo吗?不!

厌倦了每次发出命令都键入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安装说明已在这里更新。

Linux的安装后步骤

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

以非root用户管理Docker

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

如果在使用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

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

有人查过日志吗?

在我的例子中,/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 |start $ sudo service openvpn start

如果你在Linux上,你可能没有安装docker-machine,因为它只在Windows和Mac计算机上默认安装。

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

安装后,在尝试上面列出的任何操作之前,请重试运行docker-compose up

希望这能帮助到一些人。这适用于我在Fedora 25中的devilbox安装。

默认情况下,docker守护进程总是以根用户运行,因此你需要在docker命令前加上sudo

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

创建docker组并添加用户:

  1. 创建docker组。

    $ sudo groupadd docker < / p >

  2. 添加你的用户到docker组

    $ sudo usermod -aG docker $USER < / p >

  3. 登出并重新登录,以便重新评估组成员资格。

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

    $ docker run hello-world < / p >

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

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

我也有同样的症状

只区别于它只发生在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和显示的误导性错误消息无关。

来自@srfrnk的回答适合我。

在我的情况下,我有下一个码头工人。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,它解决了我的问题。

< p > sudo systemctl start docker —启动Docker服务

sudo docker-compose up之后。

我有Fedora 26,并试图解决同样的问题,我最终输入在Fedora开发者页面上编写Docker在Fedora开发者页面上的Docker,这帮助了我。

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

Fedora开发者页面中有如何使Docker随系统启动的指令:

sudo systemctl enable docker

如果你使用sudo启动docker,那么你应该使用sudo运行docker-compose up 如:sudo docker-compose up < / p >

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

运行你的命令

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

$sudo docker-compose up

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

Docker CE已安装并运行。创建docker组,但未向其中添加用户。运行Docker命令需要使用sudo。继续执行Linux postinstall以允许非特权用户运行Docker命令并执行其他可选配置步骤。

但是使用docker-compose up也没有工作。它给出了相同的先前错误。 所以在我的情况下(Ubuntu 18.10) sudo docker-compose up修复了这个问题

ps: @Tiw谢谢你的建议。

试试这个:

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

当运行docker-compose pull时,我得到以下错误

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

它在运行吗?

解决方案-

sudo service docker start

问题解决

我的设置有两个情况下这个错误:

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

如果需要首先运行dockerd或__abc1来启动守护进程。如果你用sudo启动dockerd,你可能也想用sudo运行docker-compose up。否则也没关系。

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

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

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

当你得到错误时:

ERROR: cannot 't connect to Docker daemon at http+ Docker://localhost - . 它在运行吗?< / p >

解决方案将是:

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

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

  2. 其次,启动docker 作为sudo sudo docker-compose up

我已经通过以下步骤解决了这个问题

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

现在docker-compose up正在工作

我知道这很傻,但在我的情况下,我只是尝试了sudo,它像一个魅力。

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

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

< p >退出 退出< / p >

然后再次SSH到服务器

以下是对我有用的,我不确定是哪一部分起作用了:

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

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

sudo chmod 666 /var/run/docker.sock

然后

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

Ref. .

< p > 工作! !
我尝试了以下命令和它的工作

service docker restart
docker-compose -f docker_compose.yaml down
docker-compose -f docker_compose.yaml up
1 . sudo service docker stop
2 . sudo service docker status
3 . sudo service docker start
4 . docker-compose build <app_name\service_name>

如果您使用的是Linux

尝试sudo docker-compose up

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

systemctl restart docker

一个快速解决这个问题的方法

只需在docker命令之前添加sudo


sudo docker-compose up


作为根用户运行。sudo docker-compose up --build

可能会有特权问题,等命令解决了再说吧。

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

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

我的解决方案是将图像标记改为小写字母。

更改docker-compose中的图像标记。yml文件中包含存储库IP和映像名称(小写字母)。

例如:image: 192.168.1.5/imagename:v1

Docker Compose需要特权访问,请确保在运行docker-compose命令之前提供该命令。

你可能需要杀死当前的Docker进程并重新启动Docker Desktop,然后它才最有可能工作。

P.S.我在MacOS上,在重新启动并提供对Docker Desktop(4.10.1版本)应用程序的根访问后,得到与上面相同的错误,我能够成功地运行Docker compose命令,如下所示。

Docker-compose up -d——build

sudo dockerd在我的例子中启动了docker服务,我在windows中使用wsl2。

解决这个问题的简单方法:
问题:
enter image description here < / p >

解决方案:

sudo chown $USER /var/run/docker.sock
< p > 答:
enter image description here < / p >