无法连接到 macOS 上的 Docker 守护进程
Posted
技术标签:
【中文标题】无法连接到 macOS 上的 Docker 守护进程【英文标题】:Cannot connect to the Docker daemon on macOS 【发布时间】:2017-10-20 10:58:42 【问题描述】:我通常更喜欢使用 brew 在我的 OSX 上管理我的应用程序
我可以安装 docker、docker-compose 和 docker-machine
docker --version
Docker version 17.05.0-ce, build 89658be
docker-compose --version
docker-compose version 1.13.0, build unknown
docker-machine --version
docker-machine version 0.11.0, build 5b27455
我没有下载并运行“Docker for Mac”应用程序。
但是当我尝试运行时
> docker run -d -p 80:80 --name webserver nginx
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
我已经检查了 sock 文件
ls -lah /var/run/docker.sock /var/tmp/docker.sock
ls: /var/run/docker.sock: No such file or directory
ls: /var/tmp/docker.sock: No such file or directory
我也尝试过这个建议的解决方案:Mac OS X sudo docker Cannot connect to the Docker daemon. Is the docker daemon running on this host?
但我收到此错误消息:
$ eval $(docker-machine env default)
Host does not exist: "default"
是否可以通过命令行工具运行 docker 服务?
【问题讨论】:
从 Launchpad 启动 Docker 应用程序,将显示一个对话框,要求运行该应用程序,必须为此应用程序授予一些特权,之后,Docker 将返回游戏。 在我的情况下,有另一个用户登录,这就是它失败的原因。注销其他用户然后工作 【参考方案1】:在支持的 Mac 上,运行:
brew install --cask docker
然后启动 Docker 应用。点击下一步。它将要求特权访问。确认。鲸鱼图标应出现在顶部栏中。点击它,等待“Docker is running”出现。
您现在应该可以运行docker
命令了:
docker ps
由于docker是系统级包,不能使用brew install
安装,必须使用--cask
代替。
注意:此解决方案仅适用于 CPU 支持虚拟化的 Mac,可能不包括旧 Mac。
Edit 2022 - cmets 部分提到 Docker Desktop 的许可发生了变化。请考虑以下替代方案,并查看 cmets 了解详细信息。
【讨论】:
这应该是公认的答案。安装后进入launch pad,搜索docker 我做了一个 brew install docker 并且在我运行命令 brew cask install docker 之前没有安装该应用程序。谢谢! 如果命令在 cask 安装后仍然无法运行(并且 Docker 鲸在给定密码后显示它正在运行),会发生什么? 此解决方案仅适用于 CPU 支持虚拟化的 Mac。例如,它不在 2009 Mac Pro 上工作。您能否编辑您的答案以包含这一重要事实? 这太棒了;但是没有进入GUI就没有办法做到这一点吗?$ open /Applications/Docker.app
返回LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Docker.app.
【参考方案2】:
在 macOS 上,docker
二进制文件只是一个客户端,你不能用它来运行 docker 守护进程,因为 Docker 守护进程使用 Linux 特定的内核特性,因此你不能在 OS X 中本地运行 Docker。所以你有安装 docker-machine
以创建 VM 并附加到它。
在 macOS 上安装docker-machine
如果您还没有docker-machine
命令,请使用以下方法之一进行安装:
brew install docker-machine docker
。
手动来自Releases page:
$ curl -L https://github.com/docker/machine/releases/download/v0.16.1/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine
$ chmod +x /usr/local/bin/docker-machine
请参阅:Get started with Docker for Mac。
安装 Virtualbox
docker-machine
依赖于安装的 VirtualBox,如果不是这样,将会失败。如果您已经拥有 VirtualBox,则可以跳过此步骤。
brew cask install virtualbox
手动使用Virtualbox.org 上的版本
您将需要在 OS X 安全面板中主动接受加载 Virtualbox 内核扩展,然后继续重新启动机器以确保下一个命令不会因Error: VBoxNetAdpCtl: Error while adding new interface
而失败
在 macOS 上配置 docker-machine
创建一台default
机器(如果没有,请参阅:docker-machine ls
):
docker-machine create --driver virtualbox default
然后为 Docker 客户端搭建环境:
eval "$(docker-machine env default)"
然后通过列出容器进行仔细检查:
docker ps
请参阅:Get started with Docker Machine and a local VM。
相关:
Brew install docker does not include docker engine? 对于 Linux,请参阅:Docker can't connect to docker daemon 对于 Windows,请参阅:Docker warning: failed to get default registry endpoint from daemon【讨论】:
这应该是公认的答案。它清楚地概述了 a) 为什么它不起作用,b) 无需在 OSX 上下载 UI 即可使其工作的说明,以及 c) 供进一步阅读的参考链接。 当你完成以上所有工作时,你最好将eval "$(docker-machine env default)"
添加到你的shell的.*rc文件中(例如.zshrc,.bashrc)
不错的答案,虽然我是新手,但运行 `eval "$(docker-machine env default)" 的目的是什么,我应该将其添加到我的 .zshrc 文件中吗?
@xiaojueguan:为什么?
如果您在 MacOS 上并使用 Virtualbox >=6.1.28 并且您收到如下错误:VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available) VBoxManage: error: Context: "EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp
Then check out this answer【参考方案3】:
我遇到了同样的问题,我通过以下步骤解决了它:
docker-machine restart
退出终端(或iTerm2等)并重启
eval $(docker-machine env default)
我也回复了here
【讨论】:
eval 一个“应该”就是你所需要的 :)【参考方案4】:我有 Mac OS,我打开 Launchpad
并选择 docker
应用程序。
从reset
标签点击restart
。
【讨论】:
是的,你得先启动Docker应用哈哈【参考方案5】:试试这个来创建默认值。
docker-machine create default
【讨论】:
这只是给了我... docker-machine create default 创建 CA:/Users/stens/.docker/machine/certs/ca.pem 创建客户端证书:/Users/stens/.docker/ machine/certs/cert.pem 运行预创建检查... 预创建检查出错:“未找到 VBoxManage。确保已安装 VirtualBox 并且 VBoxManage 在路径中” .... 这似乎是错误的,因为 VirtualBox 不再存在在 osx 上运行 docker 是必需的 看来你也可以使用xhyve
,见***.com/a/42419979/32453 或者只安装virtualbox :)
然后.. 那又怎样?
@FrankyFred 好的,我添加了一个答案以试图澄清。【参考方案6】:
在 OSX 上确保您在发布之前已启动 Docker 应用程序
docker ps
或docker build
...等...是的,发布似乎很奇怪并且有些误导
docker --version
即使 docker 守护进程没有运行,也会给出版本...对于那些其他版本的 cmds 同上...我刚刚遇到完全相同的症状...OSX 上的这种行为与 linux 上的不同
【讨论】:
【参考方案7】:Docker for Mac 已弃用。而且你不需要 Homebrew 在 Mac 上运行 Docker。相反,您可能想要安装 Docker Desktop,或者,如果已经安装,请确保它是最新的并且正在运行,然后再次尝试连接到套接字。
【讨论】:
对于那些需要通过暴露端口从主机访问容器的人来说,这个解决方案是行不通的。来自 Docker 文档:“......请注意,Docker Desktop 无法将流量路由到容器,因此您无法从主机直接访问正在运行的容器上的公开端口。” docs.docker.com/docker-for-mac/docker-toolbox【参考方案8】:我更新了 docker,docker 说它正在运行,并且诊断良好。我需要取消设置一些旧环境变量(感谢https://docs.docker.com/docker-for-mac/troubleshoot/#workarounds-for-common-problems)
unset DOCKER_HOST
unset DOCKER_CERT_PATH
unset DOCKER_TLS_VERIFY
【讨论】:
这解决了我从基于 VM 的 docker 更新到 Mac 安装程序后的问题。它一直在寻找虚拟机。 如果您在“无法连接...等”中看到错误的 IP 地址,请使用此选项【参考方案9】:我遇到了同样的问题。 Docker 正在运行,但无法通过 CLI 访问它。
对我来说,问题是通过执行“Docker Quickstart Terminal.app”解决的。它位于“/Applications/Docker/”文件夹中。只要我在终端应用程序的这个实例中工作,Docker 就可以完美地工作。如果需要第二个窗口,我必须再次运行“快速启动”应用程序。
我有一个 Docker for Mac 安装。因此,我不确定我的解决方案是否适用于 Homebrew 安装。
“Docker 快速启动终端”应用程序似乎本质上是一些用于启动终端应用程序的苹果脚本和一个初始化所有必要环境变量的 bash 启动脚本。
希望这对其他人有帮助!
【讨论】:
【参考方案10】:安装 minikube 并加入黑暗面。
https://kubernetes.io/docs/tasks/tools/install-minikube/
$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
eval $(minikube docker-env)
$ docker run --rm -v $PWD:/local swaggerapi/swagger-codegen-cli generate -i /local/swagger.json -l python -o /local/test/
[main] INFO io.swagger.parser.Swagger20Parser - reading from /local/swagger.json
[main] WARN io.swagger.codegen.DefaultGenerator - 'host' not defined in the spec. Default to 'localhost'.
在带有 bash v5 的 Macbook Pro 2018 上运行良好。这些天 IMO 无需安装所有其他 docker 废话。根据我的经验,minikube 自带的 VM 和安装脚本可以替代 docker 机器。
【讨论】:
作为后续评论,我还需要 docker 用于另一个没有 kube 的项目,并且 docker 桌面运行良好。只是不要总是启动它,否则 kube 会因为这篇文章而生气。 minikube 和eval $(minikube docker-env)
无法为我解决问题。
Docker 桌面安装了吗?尝试使用 Wireshark 查看数据包和连接。 env
命令将显示环境变量。这应该对 macos 网络层提供一些见解。借助 minikube,Kaniko builder 可能会在 2022 年成为更好的解决方案。【参考方案11】:
这个问题:
$ brew install docker docker-machine
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
这显然意味着执行以下操作:
$ docker-machine create default # default driver is apparently vbox:
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
$ brew cask install virtualbox
…
$ docker-machine create default
# works this time
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ eval "$(docker-machine env default)"
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
终于成功了。
如果您不想安装虚拟盒子,可以使用“xhyve”驱动程序。
你也可以安装“docker app”(然后运行它),这显然是为了让你不必运行上面的一些。 brew cask install docker
然后运行应用程序,查看其他答案。但显然本身没有必要。
【讨论】:
【参考方案12】:您应该执行安装 docker 的脚本并从命令行启动它:
brew install --cask docker
sudo -H pip3 install --upgrade pip3
open -a Docker
docker-compose ...
之后docker-compose
应该可以工作
【讨论】:
【参考方案13】:我在我的 mac 上遇到了类似的问题,我发现 docker 没有在我的机器上运行,我只是去应用程序并调用了鲸鱼,然后它就工作了。
【讨论】:
【参考方案14】:我首先通过自制软件尝试了 docker 和 docker-compose,但这里列出了问题。我必须从 https://docs.docker.com/docker-for-mac/install/ 安装 docker 的官方安装,然后一切都按预期工作。
【讨论】:
【参考方案15】:我只需要运行 Spotlight 搜索并在 brew cask install
创建的 /Applications 文件夹下执行 Docker 应用程序。一旦运行,它会要求完成安装。然后我就可以运行docker ps
【讨论】:
【参考方案16】:尝试了以下方法,现在可以正常工作了
$ docker-machine create default
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
然后
$ docker-machine env default
终于
$ eval $(docker-machine env default)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
【讨论】:
【参考方案17】:这对我有用:
open --background -a Docker
需要几秒钟才能连接到 docker。
【讨论】:
【参考方案18】:我运行 brew install docker-machine;那么问题就解决了。最新的 docker 版本不包含 docker-machine。
【讨论】:
【参考方案19】:安装docker-machine
足以解决问题。
【讨论】:
以上是关于无法连接到 macOS 上的 Docker 守护进程的主要内容,如果未能解决你的问题,请参考以下文章
无法连接到 unix:/var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是不是正在运行?
无法连接到 tcp://localhost:2375/ 上的 Docker 守护程序。 docker 守护进程是不是正在运行。在 GitLab 上
无法连接到 Ubuntu Windows 上 bash 上的 Docker 守护程序
无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是不是正在运行?带有自托管运行器的 Gitlab Cloud CI/CD 错误
Docker Compose (docker-compose) 无法连接到 Windows Server 2016 TP5 上的 docker 守护进程