我收到一条错误消息,说我无法连接到 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.
码头工人版本
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
任何帮助将不胜感激。让我知道您是否需要更多信息。
我遇到了这个问题,不想使用 sudo
搞砸事情。在调查时,我试图获取一些信息:
docker info
令人惊讶的是,我有以下错误:
尝试在 unix:///var/run/docker.sock 连接到 Docker 守护程序套接字时获得权限被拒绝:获取 http:///var/run/docker.sock/v1.38/info:拨打 unix /var /run/docker.sock:连接:权限被拒绝
由于某种原因我没有足够的权限,以下命令解决了我的问题:
sudo chown $USER /var/run/docker.sock
等等瞧!
看来您的问题是由旧的 Docker 错误造成的,在 Docker 崩溃后未重新创建套接字文件。如果这是问题所在,那么重命名套接字文件应该允许重新创建它:
$ 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 可以作为具有适当组权限的非 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 本身运行一个 root,允许一些攻击,所以你仍然需要小心你运行的容器。有关详细信息,请参阅 Docker Security Documentation。
我遇到过同样的问题。在记录并分析了一些调试结果后,我终于解决了可能是相同的错误。先启动服务,
service docker start
不要忘记将您的用户加入 docker 组。
sudo
为其他人修复了它 -_- 很高兴发现确实是这个,我忘了做。很简单!
只需尝试使用 sudo
。好像是权限问题!
sudo docker-compose -f docker-compose-deps.yml up -d
它对我有用。
解决此问题的一种方法是首先通过运行以下命令将您的用户添加到 docker
组
sudo usermod -aG docker $USER
重要提示:请记住注销您的系统(不仅仅是您的终端)并重新登录以使其生效!
您应该使用以下内容将您的用户添加到“docker”组:
sudo usermod -aG docker ${USER}
就我而言,这是因为 ubuntu 许可,
项目清单
检查权限
docker info
https://i.stack.imgur.com/rgsru.png
sudo chmod -R 777 /var/run/docker.sock
当 Dockerfile
目录中有当前用户无法访问的文件时,我收到此错误。 docker
因此无法将完整的上下文上传到守护程序并带来“无法在 http+docker://localunixsocket 连接到 Docker 守护程序”消息。
docker build .
会产生任何权限问题。
从“ps aux | grep docker”的输出看,docker daemon 似乎没有运行。尝试使用以下方法来查看问题所在以及 docker 未启动的原因
检查泊坞窗日志
sudo tail -f /var/log/upstart/docker.log
尝试在调试模式下启动 docker
$ sudo 码头工人 -d -D
出现此错误的另一个原因:对我来说,这是 docker-compose.yml
中的格式错误的图像路径定义:
service:
image: ${CONTAINER_REGISTRY_BASE}/my-service
...
首先看起来不错,但我在环境中设置了 CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/
。显然图像路径中的 //
导致了这个错误。
docker-compose: v.1.21.2
docker: 18.03.1-ce
在我的情况下,您的 docker 服务可能会停止
启动docker服务的命令:
$ sudo systemctl start docker
验证它是否启动的命令:
$ sudo docker run hello-world
我使用的是 Ubuntu 16.04,在使用 docker-compose 时也发现了这个问题。我通过运行此命令修复了它。
$ sudo systemctl start docker
$ sudo docker-compose build
您删除默认机器的可能性很小吗?但是,首先检查是否所有文件都存在(OSX,在其他系统上类似)
brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
另外,安装 Docker App,因为它更容易维护容器:
brew cask reinstall docker
ans 从 finder 启动 Docker 应用程序(等到服务完全启动)
然后,检查安装:
docker-machine ls
如果列表中没有机器,则创建一台并启动它:
docker-machine create default
docker-machine start default
在此之后,构建、组合和所有其他命令应该可以正常工作。
在我的情况下,当我尝试 docker-compose build
时出现相同的错误,我的解决方案只是添加 sudo
sudo docker-compose build
对我来说,解决方法是使用 this article 安装 docker-compose
的较新版本 (1.24)。
以前的版本 (1.17) 是从 ubuntu
的默认存储库安装的,但在安装了较新的版本后,我设法启动了容器。希望它可以帮助某人。
我认为这是因为访问权,你只需要写
sudo docker-compose-deps.yml up
在我的情况下,问题在于不适当的图像标签名称 -backend
- 以短前导破折号开头:
失败的:
version: '2.4'
services:
my-service:
container_name: my.backend
image: imagename:-backend
build:
context: .
错误信息:
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.
作品: 与 my-backend
version: '2.4'
services:
my-service:
container_name: my.backend
image: imagename:my-backend
build:
context: .
它帮助我实现了 sudo chown -Rv someuser.someuser ~someuser/docker_compose_dir/
,其中 someuser
是我在其下运行 docker-compose
的用户。之后,docker-compose
顺利进行。
最终解决方案:首先运行这个命令:sudo chown $USER /var/run/docker.sock 然后运行这个命令:docker-compose up -d --build
您需要 Docker 后安装组配置以获得许可
sudo usermod -aG docker ${USER}
su - ${USER}
id -nG
sudo usermod -aG docker username
在您的终端上逐个运行上述命令,如果您真的想知道每个步骤的含义,请检查(第 2 步)HERE
然后尝试再次连接
我发现了这个,它似乎解决了我的问题。
GitHub Fix Docker Daemon Crash
如链接所示,我更改了 docker-compose-deps.yml 文件的内容。然后我运行 docker-compose -f docker-compose-deps.yml up -d
。然后我把它改回来,它出于某种原因工作。我不必继续我提供的链接中的步骤,但前两个步骤为我解决了这个问题。
sudo
只是一种解决方法/hack。由于此处未解释组创建部分,因此仅给出了一个链接,并且该链接的内容已更改,我认为这是仅链接的答案,现在它基本上没有用(对于真正的修复部分)。您能否添加有关如何添加该组的描述?sudo
也是一个坏主意。有关以非 root 用户身份管理 Docker 的信息,请参阅 Docker 文档:docs.docker.com/engine/installation/linux/linux-postinstall/…sudo usermod -aG docker $USER
,然后它就会起作用。