无法连接到macOS上的Docker守护程序

Ant*_*ong 160 macos docker macos-sierra

我通常更喜欢使用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
Run Code Online (Sandbox Code Playgroud)

我没有下载并运行'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'.
Run Code Online (Sandbox Code Playgroud)

我已经检查了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
Run Code Online (Sandbox Code Playgroud)

我也试过这个提出的解决方案:Mac OS X sudo docker无法连接到Docker守护进程.docker守护程序是否在此主机上运行?

但我收到此错误消息:

$ eval $(docker-machine env default)
Host does not exist: "default"
Run Code Online (Sandbox Code Playgroud)

是否可以通过命令行工具运行docker服务?

fri*_*mle 348

brew cask install docker
Run Code Online (Sandbox Code Playgroud)

然后启动Docker应用程序.点击下一步.它将要求特权访问.确认.鲸鱼图标应出现在顶部栏中.单击它并等待"Docker正在运行"出现.

docker现在应该能够运行命令.

docker ps
Run Code Online (Sandbox Code Playgroud)

  • 我做了一个brew安装docker,直到我运行命令brew cask install docker才安装应用程序.谢谢! (28认同)
  • @friederbluemle https://docs.docker.com/desktop/mac/release-notes/#new 引用了一种新的许可模式,该模式要求超过一定规模的组织付费才能在 Mac 和 Windows 上使用 GUI。答案应该更像是/sf/answers/3480374691/。我还在这里写了有关 bigsur 的问题 https://mindhaus.medium.com/ditching-docker-for-desktop-on-macos-bf087d5f60f9 (8认同)
  • 这应该是公认的答案。安装并搜索docker后转到启动板 (6认同)
  • 这太棒了;但是有没有办法在不进入 GUI 的情况下做到这一点?`$ open /Applications/Docker.app` 返回 `LSOpenURLsWithRole() 失败,文件 /Applications/Docker.app 出现错误 -10810。` (6认同)
  • 如果即使在安装cask之后该命令仍然不起作用(并且Docker whale显示在输入密码后它仍在运行),该命令会发生什么情况? (2认同)
  • 它对我有用,但我在使用“brew cask install docker”重新安装之前运行了“brew uninstall docker”。然后一切都像魅力一样发挥作用。 (2认同)
  • 此解决方案仅适用于 CPU 支持虚拟化的 Mac。例如,它*不适用于 2009 Mac Pro。您能否编辑您的答案以包含这一重要事实? (2认同)
  • 通过这种方法使用 Docker Desktop 存在一定的权衡[如此处所述](https://docs.docker.com/docker-for-mac/docker-toolbox/)。我认为应该更新这个答案以表明这一点。我个人选择不使用 Docker Desktop,而是各自使用。 (2认同)
  • 既然 Docker Desktop 上的许可发生了变化,这不是一个好的答案。 (2认同)
  • @user5359531如果我没记错的话,你之前已经安装了docker。同样的问题也发生在我身上。所以我在运行“brew install --cask docker”之前运行“brew uninstall docker”。 (2认同)

efr*_*iis 122

如果你像我一样在 Docker Desktop 4.13.0 之后出现在这里,那是因为 Docker/var/run/docker.sock在默认行为中摆脱了符号链接!请参阅此处的发行说明。

快速修复:复制下面“永久解决方案”下的命令

问题

我正在经历docker ps(和其他 docker 客户端命令)工作,但与 docker 交互的其他库(例如 supabase CLI)导致:

$ supabase start
Error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Run Code Online (Sandbox Code Playgroud)

解决方案

现在,您必须手动执行一些操作,以便让您的工具找到真正的docker 套接字文件,默认情况下位于~/Library/Containers/com.docker.docker/Data/docker.raw.sock.

永久解决方案:手动符号链接

这是“撤消”此临时修复的永久解决方案。

sudo ln -s ~/Library/Containers/com.docker.docker/Data/docker.raw.sock /var/run/docker.sock
DOCKER_HOST=unix:///var/run/docker.sock docker ps # test that it works using linked socket file
Run Code Online (Sandbox Code Playgroud)

临时解决方案:使用DOCKER_HOST

这将暂时让您的命令使用新的套接字文件

DOCKER_HOST=unix:///Users/$USER/Library/Containers/com.docker.docker/Data/docker.raw.sock docker ps
Run Code Online (Sandbox Code Playgroud)

(替换docker ps为您想要的任何命令,例如supabase start

您还可以使其在当前的终端会话中工作,或者粘贴到您的.zshrc永久会话中,方法是:

export DOCKER_HOST=unix:///Users/$USER/Library/Containers/com.docker.docker/Data/docker.raw.sock
Run Code Online (Sandbox Code Playgroud)

  • 这是对我的 M1 mac 有帮助的唯一答案。 (16认同)
  • 嘿伙计!这个问题应该在 4.13.1 中得到解决,所以你不需要再手动创建符号链接了!如果您仍然遇到此问题,我建议更新 Docker 并查看它是否可以自行解决。https://docs.docker.com/desktop/release-notes/#4131 (2认同)

ken*_*orb 76

在macOS上,docker二进制文件只是一个客户端,你不能使用它来运行docker守护进程,因为Docker守护进程使用特定于Linux的内核功能,因此你无法在OS X中本机运行Docker.所以你必须安装docker-machine才能创建VM并附加到它.

docker-machine在macOS上安装

如果还没有docker-machine命令,请使用以下方法之一安装它:

  • 使用Brew命令:brew install docker-machine docker.
  • 手动:

    $ 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
    
    Run Code Online (Sandbox Code Playgroud)

请参阅:Docker for Mac入门.

docker-machine在macOS上配置

创建一brew cask install virtualbox台机器(如果没有,请参阅:)Error: VBoxNetAdpCtl: Error while adding new interface:

docker-machine create --driver virtualbox default
Run Code Online (Sandbox Code Playgroud)

然后为Docker客户端设置环境:

eval "$(docker-machine env default)"
Run Code Online (Sandbox Code Playgroud)

然后通过列出容器仔细检查:

docker ps
Run Code Online (Sandbox Code Playgroud)

请参阅:Docker Machine和本地VM入门.


有关:

  • Docker 机器现已弃用,应在答案中概述 https://docs.docker.com/machine/ (17认同)
  • 另外,在 ARM Mac 上安装 Virtualbox 是不可能的……据我所知,这不太可能。基本上它只支持 ARM 客户操作系统(这并不可怕),或者它必须模拟 Intel CPU,这很可能会工作得很糟糕。 (9认同)
  • 这应该是公认的答案。它清楚地概述了a)为什么不起作用,b)在不下载OSX上的UI的情况下使它工作的说明,以及c)参考链接以供进一步阅读。 (3认同)
  • 如果您使用的是 MacOS 并使用 Virtualbox >=6.1.28,并且您收到如下错误:`VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - 访问被拒绝(扩展信息不可用) VBoxManage: error: Context: " EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp` [然后查看这个答案](/sf/ask/4880557811/ vagrant-up-failing-for-virtualbox-provider-with-e-accessdenied-on-host-only-netw) (3认同)

Don*_*ghn 56

ATTN:docker-machine 已弃用(请参阅此处

docker-machine 项目现已正式停止。

我发现Colima是一个很好的替代品,您可以通过简单的步骤轻松连接 docker 守护进程:

brew install docker docker-compose colima
# make coffee
colima start
Run Code Online (Sandbox Code Playgroud)

准备码头:

docker run hello-world
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!我在这里尝试了其他答案,但这是唯一适用于我的 M1 Pro oO 的解决方案。最后,我可以在不安装应用程序的情况下使用 docker `httpbin` :) (5认同)
  • 这是唯一帮助我使用 MacOS M2 芯片的答案。谢谢。 (2认同)

小智 28

我有同样的问题,我通过以下步骤解决了这个问题:

docker-machine restart
Run Code Online (Sandbox Code Playgroud)

退出终端(或iTerm2等)并重启

eval $(docker-machine env default)
Run Code Online (Sandbox Code Playgroud)

我也在这里回答

  • 我得到“-bash:docker-machine:找不到命令”。 (4认同)
  • eval 一个“应该”就是你所需要的:) (2认同)

Ati*_*sha 27

对我来说重新启动 docker 没有帮助。(通过终端和用户界面尝试过)

下面的选项没有被选中,所以我把它选中了。之后我就可以运行我的容器设置 -> 高级 -> 启用默认 Docker 套接字(需要密码)

注意 - 它将需要管理员凭据。

在此输入图像描述


Lig*_*mer 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>
Run Code Online (Sandbox Code Playgroud)

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'.
Run Code Online (Sandbox Code Playgroud)

在装有 bash v5 的 Macbook Pro 2018 上运行良好。在我看来,现在不需要安装所有其他 docker 废话了。根据我的经验,minikube 自带的虚拟机和安装脚本可以替代 docker machine。


aru*_*436 10

仅仅打开 Docker Desktop 对我来说就很有效。

  • Docker Desktop 现在需要付费订阅才能用于商业用途 (5认同)

hig*_*yte 10

为了扩展其他答案 - 在花了整个上午的时间来解决这个问题并且其他答案都没有帮助之后,最后我发现 docker 试图访问 docker.sock 的错误路径(!!),因为几个月前我安装了 colima。

运行这个帮助我切换回来:

docker context use default


小智 9

试试这个来创建默认值.

docker-machine create default
Run Code Online (Sandbox Code Playgroud)

  • 这只是给了我... docker-machine创建默认创建CA:/Users/stens/.docker/machine/certs/ca.pem创建客户端证书:/Users/stens/.docker/machine/certs/cert.pem运行预创建检查...预创建检查错误:"找不到VBoxManage.确保安装VirtualBox并且VBoxManage在路径中"......这似乎是错误的,因为VirtualBox不再需要在osx上运行docker (5认同)

Ehs*_*dar 9

我有Mac OS,然后打开Launchpad并选择docker应用程序。从reset选项卡上单击restart

  • 对我有用的简单解决方案。 (3认同)
  • 是的,你必须先启动 Docker 应用程序哈哈 (2认同)

Mat*_*tSt 9

这对我来说很有效:

open --background -a Docker
Run Code Online (Sandbox Code Playgroud)

需要几秒钟才能连接到 docker。

我使用的是 Mac OS Big Sur。


rog*_*ack 7

这个问题:

\n
$ brew install docker docker-machine\n$ docker ps\n\nCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\n
Run Code Online (Sandbox Code Playgroud)\n

这显然意味着执行以下操作:

\n
$ docker-machine create default # default driver is apparently vbox:\nRunning pre-create checks...\nError with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"\n$  brew cask install virtualbox\n\xe2\x80\xa6\n$ docker-machine create default \n# works this time\n$ docker ps\nCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\n$ eval "$(docker-machine env default)"\n$ docker ps\nCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES\n
Run Code Online (Sandbox Code Playgroud)\n

它终于起作用了。

\n

如果您不想安装虚拟盒,则可以使用 \xe2\x80\x9cxhyve\xe2\x80\x9d 驱动程序。\n此外,您还可以安装 \xe2\x80\x9cdocker 应用程序\xe2\x80\ x9d (然后运行它)这显然使得你不必运行上面的一些内容。brew cask install docker然后运行应用程序,查看其他答案。但显然本身没有必要。

\n


Sco*_*and 6

在OSX上确保在发布前已启动Docker应用程序

docker ps
Run Code Online (Sandbox Code Playgroud)

docker build...等等...是的,这似乎很奇怪,并且在某种程度上误导了发行

docker --version
Run Code Online (Sandbox Code Playgroud)

即使docker daemon没有运行也给出版本...对于其他版本的cmds也是一样的...我只是遇到了完全相同的症状... OSX上的这种行为与Linux上的行为不同


Oma*_*mar 6

就我而言,MacOS 要求我授予 docker 访问权限来运行默认套接字。我错误地取消了。但是,在高级设置部分我找到了该设置。检查并重启docker后,权限问题解决。

在此输入图像描述

在此输入图像描述


beo*_*beo 5

我有同样的问题。Docker 正在运行,但无法通过 CLI 访问它。

对我来说,问题是通过执行“Docker Quickstart Terminal.app”解决的。它位于“/Applications/Docker/”文件夹中。只要我在终端应用程序的这个实例中工作,Docker 就能完美工作。如果需要第二个窗口,我必须再次运行“快速启动”应用程序。

我有一个适用于 Mac 的 Docker 安装。因此,我不确定我的解决方案对于 Homebrew 安装是否有效。

“Docker Quickstart Terminal”应用程序似乎本质上是一些启动终端应用程序的苹果脚本和一个初始化所有必要的环境变量的 bash 启动脚本。

希望这对其他人有帮助!


Mic*_*ael 5

我有最新的 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
Run Code Online (Sandbox Code Playgroud)


Jos*_*das 5

Docker for Mac 已弃用。而且你不需要 Homebrew 在 Mac 上运行 Docker。相反,您可能想要安装 Docker Desktop,或者如果已经安装,请确保它是最新的并且正在运行,然后再次尝试连接到套接字。

在此处输入图片说明


归档时间:

查看次数:

88008 次

最近记录:

6 年,4 月 前