Docker 无法连接到 docker daemon macOS

问题描述 投票:0回答:1

我试图逃跑

docker run hello-world
测试我的 docker 安装是否有效。然后我使用命令
brew services start docker-machine
通过 Homebrew 启动 docker 机器。但是,我收到此错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

每次我想连接到 docker 机器时,我都必须执行本文中所述的步骤:Docker 无法连接到 docker 守护进程才能使用我的 docker 机器:

docker-machine start # Start virtual machine for docker
docker-machine env  # It's helps to get environment variables
eval "$(docker-machine env default)" # Set environment variables

我不明白为什么每次我想在虚拟机上运行 docker 时都必须执行这些步骤。

macos docker docker-machine
1个回答
0
投票

您使用

docker-machine
而不是
Docker Desktop
应用程序有什么具体原因吗?对于后一种情况,许多事情(例如启动虚拟机、设置配置和安装卷)都在后台发生。

有关详细信息,请检查https://www.docker.com/products/docker-desktop(确保卸载您当前使用的工具)

docker-machine env
上回答您的具体问题:

docker
CLI 工具通过 unix 或 tcp 套接字与守护进程交互。 cli 的默认设置是在您提到的路径中查找 unix 套接字 (
unix:///var/run/docker.sock
)。

由于 docker 守护进程无法在 MacOS 上原生运行,因此您需要使用一些 Linux 虚拟机才能在 Mac 上使用 docker。 Docker-machine 是执行此操作的旧方法,它基本上是一个启动新虚拟机的工具,该虚拟机获取一些(相当)随机的 IP 地址。如果您的 MacOS 本地 CLI 现在想要连接到此计算机,则需要使用此特定 IP 地址上的 tcp 套接字。

docker-machine env
命令基本上为您的 docker CLI 创建一些环境变量来覆盖
unix:///var/run/docker.sock
的默认设置。除了 TCP 套接字 URL 之外,它还配置一些证书,用于针对虚拟机的 docker 套接字进行身份验证。所有这些环境变量都会配置 docker CLI 工具。

eval
命令会自动将这些环境变量导出应用到当前活动的 shell。这些值是短暂的,在重新启动或打开新 shell 时不会持续存在。

您可以将这些值放入 shell 配置中,以便自动应用它们(例如在

.bashrc
.zshrc
中)。但由于 IP 地址可能不稳定,您可能会遇到 shell 指向旧配置的问题。这就是为什么您可能每次都执行此命令以获得当前设置。

有关

docker-machine env
的详细信息,请参阅文档 https://docs.docker.com/machine/reference/env/

© www.soinside.com 2019 - 2024. All rights reserved.