232

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

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

4

30 回答 30

319

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

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

于 2016-02-24T05:38:37.933 回答
101

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

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

于 2015-03-17T22:41:25.897 回答
67

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

于 2018-05-01T10:04:56.563 回答
46

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

sudo chmod 666 /var/run/docker.sock

进而

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

参考。

于 2020-09-14T04:16:22.833 回答
29

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

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

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

  1. 创建泊坞窗组。

    $ sudo groupadd docker

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

    $ sudo usermod -aG docker $USER

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

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

    $ docker run hello-world

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

上述步骤来自官方 Docker 文档

于 2017-02-02T09:32:21.097 回答
29

当您收到错误时:

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

解决方案是:

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

    if Not - run sudo service docker start or sudo systemctl start docker(取决于某些 linux 版本,请参阅 Docker入门说明)。

  2. 二、以sudo启动docker sudo docker-compose up

于 2019-09-25T09:51:24.990 回答
17

sudo systemctl start docker - 启动 Docker 服务。

sudo docker-compose up之后。

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

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

Fedora 开发者页面上,有说明如何使 Docker 从系统启动:

sudo systemctl enable docker

于 2018-03-18T23:44:06.630 回答
12

解决这个问题的快速方法

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


sudo docker-compose up

于 2021-04-29T10:31:23.557 回答
9

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

于 2021-05-06T07:31:04.323 回答
7

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

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

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

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

于 2017-01-16T12:22:10.243 回答
5

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

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

于 2020-06-09T12:15:59.043 回答
4

有人检查过日志吗?

在我的情况下,错误消息/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 是解决方案。

于 2016-03-21T16:46:53.293 回答
4

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

于 2018-05-29T09:16:33.437 回答
4

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

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"
于 2019-08-22T11:42:37.533 回答
4

如果你使用的是 linux

尝试sudo docker-compose up

于 2021-01-15T00:20:29.777 回答
4

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

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

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

于 2021-07-16T10:44:54.763 回答
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它,它解决了我的问题。

于 2017-11-12T19:02:20.730 回答
3

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

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

它在运行吗?

解决方案 -

sudo service docker start 

问题解决了

于 2019-06-20T08:55:55.640 回答
3
1 . sudo service docker stop 
2 . sudo service docker status
3 . sudo service docker start
4 . docker-compose build <app_name\service_name>
于 2020-12-20T14:59:41.643 回答
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文件中,因为构建不需要它。另一个解决方案可能是 to chownor chmodit。

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

于 2017-07-19T07:11:39.970 回答
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 感谢您的建议。

于 2019-03-03T05:00:05.753 回答
1

试试这个:

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

于 2019-04-24T19:17:46.210 回答
1

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

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

现在 docker-compose up 正在工作

于 2020-05-18T07:09:40.680 回答
1

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

退出 退出

然后再次 ssh 进入服务器

于 2020-07-09T15:17:35.970 回答
1

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

service docker restart
docker-compose -f docker_compose.yaml down
docker-compose -f docker_compose.yaml up
于 2020-12-01T02:56:14.520 回答
0

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

于 2018-11-27T21:38:43.300 回答
0

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

  • __pycache__我在容器内运行集成测试后由 root 用户创建的文件对于 docker(告诉您原始问题)和 docker-compose(含糊不清地告诉您有关 docker 主机)无法访问;
  • microk8s阻止我的端口,直到我停止它。
于 2019-07-24T07:29:42.963 回答
0

尝试运行dockerdsudo dockerd如果需要先启动守护程序。如果你从你开始dockerdsudo你可能也想docker-compose up运行sudo。否则没关系。

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

于 2019-07-25T08:19:26.343 回答
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  
于 2020-07-15T01:32:00.470 回答
0

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

systemctl restart docker
于 2021-01-27T13:36:47.427 回答