我试图逃跑
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 时都必须执行这些步骤。
您使用
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/