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

4
我正在尝试运行docker run hello-world来测试我的docker安装是否正常。然后我使用命令brew services start docker-machine通过Homebrew启动docker machine。但是,我遇到了以下错误信息: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 每次我想连接到docker machine时,我都必须按照此帖子中所述的步骤进行操作:Docker can't connect to docker daemon才能使用我的docker-machine。
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时都必须执行这些步骤。
1个回答

1

您为什么要使用docker-machine而不是Docker Desktop应用程序?使用后者,许多事情,如启动虚拟机、设置配置和挂载卷都会在后台发生。

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

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

docker CLI工具通过unix或tcp sockets与守护进程进行交互。cli的默认设置是在您提到的路径下寻找unix socket(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外,它还配置了一些证书,用于对VM的Docker套接字进行身份验证。所有这些环境变量都配置了Docker CLI工具。 eval命令会自动将这些环境变量导出到当前活动的shell中。这些值是短暂的,并且不会在重新启动或打开新的shell时持久化。
您可能可以将这些值放入您的shell配置文件中,以便自动应用它们(例如,在.bashrc.zshrc中)。但是,由于IP地址可能不稳定,您可能会遇到shell指向旧配置的问题。这就是为什么您可能需要每次执行此命令以获取当前设置的原因。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接