我在 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
成功了。
sudo service docker restart
或 sudo service docker start
我用这个解决了它。
对我来说简单的解决方案: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
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。
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 以确保它始终是最新的。
$ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
如果您使用 sudo
启动 docker,那么您应该使用 sudo
运行 docker-compose up,例如:sudo docker-compose up
sudo docker-compose build
而不是 docker-compose build
时,它对我有用。
我通过以下方式解决了 Ubuntu 20.0.4 中的问题
sudo chmod 666 /var/run/docker.sock
接着
sudo service docker start && docker-compose up -d
默认情况下,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。
docker-compose
的用户设置为 /usr/local/bin/docker-compose
的所有者,然后重新启动服务
su - $USER
刷新 group
成员资格以节省注销和上
当您收到错误时:
错误:无法在 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
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
systemctl
替换为 launchctl
。
解决这个问题的快速方法
只需在 docker 命令之前添加 sudo ,例如
sudo docker-compose up
以 root 身份运行它。 sudo docker-compose up --build
如果你使用的是 linux
试试sudo docker-compose up
如果您使用的是 Linux,则可能没有安装 docker-machine
,因为它仅默认安装在 Windows 和 Mac 计算机上。
如果是这样,您将需要:https://docs.docker.com/machine/install-machine/ 找到有关如何在您的 Linux 版本上安装它的说明。
安装后,重试运行 docker-compose up
,然后再尝试上面列出的任何内容。
希望这可以帮助某人。这适用于我在 Fedora 25 中安装的devilbox。
我知道这很愚蠢,但就我而言,我只是尝试使用 sudo
,它就像一个魅力。
在您的情况下,只需尝试:$ sudo docker-compose up
有人检查过日志吗?
在我的情况下,/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
是解决方案。
如果您使用的是 docker-machine,那么您必须使用 env 变量激活环境。如果您不使用 docker-machine 然后使用 sudo 运行您的命令
运行 docker-compose pull
- 我遇到错误
错误:无法在 http+docker://localhost 连接到 Docker 守护程序
它在运行吗?
解决方案 -
sudo service docker start
问题解决了
除了将用户添加到 docker 组之外,为避免重复输入 sudo
,您还可以为 docker
命令创建别名,如下所示:
alias docker-compose="sudo docker-compose"
alias docker="sudo docker"
可能存在特权问题,以下命令对我有用。
sudo chown $USER /var/run/docker.sock
感谢 Max 的解决方案:https://stackoverflow.com/posts/60282354/revisions
@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
并解决了我的问题。
1 . sudo service docker stop
2 . sudo service docker status
3 . sudo service docker start
4 . docker-compose build <app_name\service_name>
docker-compose pull
也为我工作。
我也有同样的症状。
只有在 docker-compose build
docker ps
期间发生的差异才有效。发生在版本 2.x
和 3.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
文件,因为构建不需要它。另一种解决方案可能是 chown
或 chmod
它。
无论如何,也许这可以帮助遇到与 docker
和显示的误导性错误消息无关的相同问题的人。
chown
/ chmod
修复了它。可怕的错误信息,但他们正在努力。请参阅github.com/docker/compose/issues/5318
$sudo docker-compose up
我确实按照上述答案中的步骤将 $USER 添加到组 docker。我不想添加一个新的组 docker 因为在我的 docker 安装中自动创建了一个名为 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
我已经使用以下步骤解决了这个问题
$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up
现在 docker-compose up 正在工作
注销然后再次帮助我。在我的情况下,它是全新安装,我创建了一个新用户,新组,然后将该用户添加到 docker 组。
退出 退出
然后再次 ssh 进入服务器
在职的!!我尝试使用以下命令及其工作
service docker restart
docker-compose -f docker_compose.yaml down
docker-compose -f docker_compose.yaml up
对我来说,我开始升级 Docker 并中途取消。我没有注意到 Docker 没有运行(如果是,我的 Macbook 的顶部导航栏有一个图标,显示剩余电池电量、时间等)。在我启动它并完成升级后,docker-compose up
再次运行!
对于此错误,我的设置有两种情况:
__pycache__ 在我在容器内运行集成测试后由 root 用户创建的文件对于 docker(告诉您原始问题)和 docker-compose(含糊不清地告诉您有关 docker 主机)无法访问;
microk8s 阻止了我的端口,直到我停止它。
如果需要先尝试运行 dockerd
或 sudo dockerd
以启动守护程序。如果您使用 sudo
启动 dockerd
,您可能还希望使用 sudo
运行 docker-compose up
。否则没关系。
https://github.com/docker/compose/issues/4181 的有效解决方案
以下内容对我有用,我不确定哪一部分起到了作用:
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
尝试使用以下命令重新启动您的 docker 环境:
systemctl restart docker
newgrp docker
sudo docker-compose up
”。当我尝试这样做时,我得到:sudo: docker-compose: command not found