Docker can';t连接到docker守护进程macOS

Docker can';t连接到docker守护进程macOS,macos,docker,docker-machine,Macos,Docker,Docker Machine,我想跑 docker运行hello world测试我的docker安装是否正常。然后,我使用命令brew services start docker machine通过自制启动docker machine。但是,我得到了这个错误: 无法连接到位于的Docker守护程序unix:///var/run/docker.sock. docker守护进程正在运行吗? 每次我想连接到docker机器时,我都必须执行本文中所述的步骤:为了能够使用我的docker机器: docker-machine start

我想跑
docker运行hello world
测试我的docker安装是否正常。然后,我使用命令
brew services start docker machine
通过自制启动docker machine。但是,我得到了这个错误:

无法连接到位于的Docker守护程序unix:///var/run/docker.sock. 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时都要执行这些步骤。

您使用
docker machine
而不是
docker Desktop
应用程序有什么具体原因吗?对于后一种方法,很多事情都是在后台进行的,比如启动虚拟机、设置配置和装载卷

有关详细信息,请检查(确保卸载当前使用的工具)

回答您关于docker machine env的特定问题:

docker
CLI工具通过unix或tcp套接字与守护进程交互。cli的默认设置是在您提到的路径(
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
的详细信息,请参阅