问题描述
我收到一条错误消息,指出我无法连接到docker守护程序。我已经调查了其他人的答案,他们有类似的问题,但没有帮助。我正在运行Ubuntu 15.10的版本。我会尽力提供我所拥有的所有信息。
root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Docker版本
root@# sudo docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:20:08 UTC 2015
OS/Arch: linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Docker-Compose版本
root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3
如果我尝试停止或启动服务会发生这种情况……
root@# sudo service docker stop
stop: Unknown instance:
root@# sudo service docker start
docker start/running, process 5375
如果我运行ps aux | grep docker
root@# ps aux | grep docker
root 4233 0.0 0.0 13692 2204 pts/15 S+ 10:27 0:00 grep --color=auto docker
任何帮助将不胜感激。如果您可能需要更多信息,请与我们联系。
最佳解决方案
调试15分钟后,我遇到了同样的错误。原来它所需要的只是一个sudo
:)在这里查看[创建一个Docker组] https://docs.docker.com/engine/installation/linux/ubuntulinux/来摆脱sudo前缀。
次佳解决方案
看来您的问题是由旧的Docker错误创建的,其中Docker崩溃后未重新创建套接字文件。如果这是问题,那么重命名套接字文件应该允许它是re-created:
$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start
由于此错误已修复,大多数人得到错误Couldn't connect to Docker daemon
可能是因为它们不在docker
组中而没有读取该文件的权限。使用sudo docker ...
运行将解决这个问题,但不是一个很好的解决方案。
Docker可以作为具有适当组权限的non-root用户(没有sudo
)运行。 Linux post-install docs有详细信息。简短版本:
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups # docker should be in the list of groups for your user
$ docker run hello-world # Works without sudo
这允许docker
组中的用户在没有sudo
的情况下运行docker
和docker-compose
命令。 Docker本身运行根,允许一些攻击,所以你仍然需要小心你运行的容器。有关详细信息,请参阅Docker Security Documentation。
第三种解决方案
我遇到过同样的问题。在记笔记并分析一些调试结果后,最后,我解决了可能是同一个错误。首先启动服务,
service docker start
不要忘记将用户包含在docker组中。
第四种方案
我有这个问题,并且不想使用sudo
搞砸了。在调查时,我试图获得一些信息:
docker info
好极了,我有以下错误:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http:///var/run/docker.sock/v1.38/info: dial unix /var/run/docker.sock: connect: permission denied
由于某种原因,我没有足够的权限,以下命令解决了我的问题:
sudo chown $USER /var/run/docker.sock
Etvoilà!
第五种方案
当Dockerfile
目录中的文件无法被当前用户访问时,我收到此错误。因此,docker
无法将完整的上下文上传到守护程序,并且在“http + docker://localunixsocket”消息中显示“无法连接到Docker守护程序”消息。
第六种方案
从“ps aux | grep docker”的输出看,看起来docker守护进程没有运行。尝试使用以下方法来查看错误以及docker无法启动的原因
-
检查泊坞窗日志
$ sudo tail -f /var/log/upstart/docker.log
-
尝试在调试模式下启动docker
$ sudo docker -d -D
第七种方案
在我的情况下,你的docker服务可能会被停止
启动docker服务的命令:
$ sudo systemctl start docker
用于验证是否启动的命令:
$ sudo docker run hello-world
第八种方案
此错误可能出现的另一个原因是:对我来说,docker-compose.yml
中的image-path定义格式错误:
service:
image: ${CONTAINER_REGISTRY_BASE}/my-service
...
先看看okisish,但我在环境中设置了CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/
。显然,图像路径中的//
导致了此错误。
docker-compose: v.1.21.2
docker: 18.03.1-ce
第九种方案
您应该将您的用户添加到”docker”组,例如:
sudo usermod -aG docker your-user
第十种方案
我找到了这个,似乎解决了我的问题。
GitHub Fix Docker Daemon Crash
我更改了我的docker-compose-deps.yml文件的内容,如链接中所示。然后我跑了docker-compose -f docker-compose-deps.yml up -d
。然后我把它改回来了,因为某种原因它起作用了。我没有必要继续我提供的链接中的步骤,但前两个步骤为我解决了问题。