ChatGPT解决这个技术问题 Extra ChatGPT

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

我通常更喜欢用 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'.

我已经检查了袜子文件

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 将返回游戏。
在我的情况下,有另一个用户登录,这就是它失败的原因。注销其他用户然后工作

f
friederbluemle

在受支持的 Mac 上,运行:

brew install --cask docker

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

您现在应该可以运行 docker 命令:

docker ps

因为 docker 是一个系统级的包,所以不能使用 brew install 安装它,而必须使用 --cask

注意:此解决方案仅适用于 CPU 支持虚拟化的 Mac,可能不包括旧 Mac。

2022 年编辑 - 评论部分提到 Docker Desktop 的许可发生了变化。请考虑下面的替代方案,并查看评论以获取详细信息。


这应该是公认的答案。安装后转到启动板并搜索 docker
我做了一个 brew install docker 并且在我运行命令 brew cask install docker 之前没有安装该应用程序。谢谢!
如果即使在木桶安装之后命令仍然不起作用(并且 Docker 鲸在给出密码后显示它正在运行),会发生什么?
这太棒了;但是没有进入GUI就没有办法做到这一点吗? $ open /Applications/Docker.app 返回 LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Docker.app.
@friederbluemle docs.docker.com/desktop/mac/release-notes/#new 引用了一种新的许可模式,该模式要求一定规模以上的组织付费才能在 Mac 和 Windows 上使用 GUI。答案应该更像stackoverflow.com/a/49719638/442837。我还在这里写了关于 bigsur 的问题mindhaus.medium.com/…
K
Kevin Burke

在 macOS 上,docker 二进制文件只是一个客户端,您不能使用它来运行 docker 守护程序,因为 Docker 守护程序使用 Linux 特定的内核功能,因此您不能在 OS X 中本地运行 Docker。所以您必须安装 { 3}为了创建VM并附加到它。

在 macOS 上安装 docker-machine

如果您还没有 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

请参阅:Get started with Docker for Mac

安装 Virtualbox

docker-machine 依赖于安装的 VirtualBox,如果不是这样,将会失败。如果您已经拥有 VirtualBox,则可以跳过此步骤。

使用 Homebrew: brew install --cask 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 不包括 docker 引擎?

对于 Linux,请参阅:Docker can't connect to docker daemon

对于 Windows,请参阅:Docker 警告:无法从守护进程获取默认注册表端点


这应该是公认的答案。它清楚地概述了 a) 为什么它不起作用,b) 无需在 OSX 上下载 UI 即可使其正常工作的说明,以及 c) 供进一步阅读的参考链接。
当您完成上述所有工作时,您最好将 eval "$(docker-machine env default)" 添加到您的 shell 的 .*rc 文件中(例如 .zshrc、.bashrc)
很好的答案,虽然我是新手,但运行 `eval "$(docker-machine env default)" 的目的是什么,我应该将它添加到我的 .zshrc 文件中吗?
如果您在 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
Docker 机器现已弃用,应在答案 docs.docker.com/machine 中概述
M
Master p

我遇到了同样的问题,我通过以下步骤解决了它:

docker-machine restart

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

eval $(docker-machine env default)

我也回答了here


eval 一个“应该”是你所需要的:)
我得到-bash: docker-machine: command not found
docker 机器已弃用,repo 已锁定
E
Ehsan Barkhordar

我有 Mac OS,我打开 Launchpad 并选择 docker 应用程序。从 reset 标签点击 restart


是的,你必须先启动 Docker 应用程序哈哈
M
Mossaddeque Mahmood

试试这个来创建默认值。

docker-machine create default

这只是给了我... docker-machine create default 创建 CA:/Users/stens/.docker/machine/certs/ca.pem 创建客户端证书:/Users/stens/.docker/machine/certs/cert.pem Running预创建检查...预创建检查出错:“未找到 VBoxManage。确保已安装 VirtualBox,并且 VBoxManage 在路径中”...。这似乎是错误的,因为 VirtualBox 不再需要在 osx 上运行 docker
看来您也可以使用 xhyve,请参阅 stackoverflow.com/a/42419979/32453 或只安装 virtualbox :)
还有..那又怎样?
@FrankyFred 好的,我添加了一个答案来试图澄清。
docker machine 已弃用。回购被锁定。
S
Scott Stensland

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

docker ps

docker build ...等...是的,发行似乎很奇怪且有些误导

docker --version

即使 docker 守护进程没有运行,也给出版本...对于那些其他版本的 cmds 同上...我只是遇到了完全相同的症状...OSX 上的这种行为与 linux 上的不同


r
rogerdpack

这个问题:

$ 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 然后运行应用程序,查看其他答案。但显然本身没有必要。


M
Michael

我更新了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 地址,请使用此选项
L
Ligemer

安装 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 年成为更好的解决方案。
b
beo

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

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

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

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

希望这对其他人有帮助!


B
Boris Azanov

您应该执行安装 docker 的脚本并从命令行启动它:

brew install --cask docker
sudo -H pip3 install --upgrade pip3
open -a Docker
docker-compose ... 

之后 docker-compose 应该可以工作


M
MattSt

这对我有用:

open --background -a Docker

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

我在 Mac OS Big Sur 上。


Unable to find application named 'Docker'
@alper我不确定它是否相关。我在 Mac OS Big Sur 上。我将其包含在我的答案中。
R
Rama Sharma

我在我的mac上遇到了类似的问题,我发现docker没有在我的机器上运行,我只是去应用程序并调用了whale然后它工作了。


a
arush436

刚刚打开 Docker Desktop 对我有用。


Docker Desktop 现在需要付费订阅才能用于商业用途
T
Thomas Kessler

我首先通过自制软件尝试了 docker 和 docker-compose,但它的问题列在这里。我必须从 https://docs.docker.com/docker-for-mac/install/ 安装 docker 的官方安装,然后一切都按预期工作。


w
wired00

我只需要运行 Spotlight 搜索并在 brew cask install 创建的 /Applications 文件夹下执行 Docker 应用程序。一旦运行,它会要求完成安装。然后我能够运行 docker ps


m
muTheTechie

尝试了以下方法,现在可以正常工作

$ 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

码头机器已弃用。回购被锁定。上次更新是在 3 年前
v
vhs

Docker 被设计为在 Linux 上运行。但是,它可以在 macOS 上的 VM 中运行。这样做有点麻烦,这也许就是 Docker Desktop 最初存在的原因。但这并不意味着您不能在 Mac 上舒适的命令行中享受使用 Docker 的乐趣。

需要考虑的一些选项:

您可以使用 lima 并将别名 doocker='lima nerdctl' 添加到您的 bash 配置文件中。您可以在您的机器上安装 Linux VM 并改用它(不推荐)。 Mac 上的双引导 Linux。现在甚至支持带有 T2 和 M1 芯片的机器。


u
ultraon

使用 VirtualBox (6.1.32r149290) 的更新版本,命令 docker-machine create --driver virtualbox default 不起作用,虚拟 VM 的自动生成 IP 出错,解释在这里 https://stackoverflow.com/a/69745931/2917630

此命令帮助我解决了问题:docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.59.3/24" default


R
Roytman Piccoli

尝试:

brew install --cask docker

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

你现在应该可以运行 docker 命令了:

docker ps

h
htlbydgod

我运行 brew install docker-machine;那么问题就解决了。最新的 docker 版本不包含 docker-machine。


码头机器已弃用
R
Roytman Piccoli

Docker Toolbox 和 Docker Machine 都已被弃用。 Docker Desktop 是官方推荐的替代品。

原始答案我发现 Docker Toolbox 可以通过 brew/cask 获得

安装自制软件

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装木桶

brew install caskroom/cask/brew-cask

安装 docker 工具箱

brew cask install docker-toolbox


a
ahmetbcakici

安装 docker-machine 足以让我解决问题。


码头机器已弃用