使用 DOCKER_HOST
环境变量
考虑使用 DOCKER_HOST
环境变量,在所有平台上实现从 Docker 到 Podman Desktop 的透明迁移。
- 继续使用熟悉的 Docker 命令。
- 享受 Podman 带来的好处。
- 您的工具,例如 Gradle 或 Testcontainers,无需重新配置即可与 Podman 通信。
使用 DOCKER_HOST
环境变量,您可以将 Docker CLI 连接到 Podman 套接字。
或者,您可以使用 docker context create
命令添加一个 podman
上下文。
-
例如,在 macOS 机器上按此模式设置上下文的值
docker context create podman --docker "host=unix://${HOME}/.local/share/containers/podman/machine/podman.sock"
其中,
unix://
协议后面指定的路径表示DOCKER_HOST
的值。
然后,您可以运行 docker context use podman
命令切换到该上下文。这样您就可以使用 Docker CLI 在远程 Podman 引擎上运行任务。当您运行 docker ps
命令时,它会查询当前上下文中指定的 Podman 套接字。
先决条件
- Podman
步骤
- Windows
- macOS
- Linux
- 找到您的 Podman 管道位置
$ podman machine inspect --format '{{.ConnectionInfo.PodmanPipe.Path}}'
-
将
DOCKER_HOST
环境变量设置为您的 Podman 管道位置。您需要将反斜杠替换为正斜杠,并在之前获取的路径前添加npipe://
协议示例
前缀podman-pipe
npipe:////./pipe/podman-machine-default
根据您偏好的终端模拟器,设置会话级别环境变量的命令略有不同
cmd - 命令提示符
set DOCKER_HOST=npipe://<inspect_command_output>
Git Bash
export DOCKER_HOST=npipe://<inspect_command_output>
Powershell
不要漏掉值两边的引号。否则,Powershell 会将其解释为单独的命令而不是一个值。
$env:DOCKER_HOST="npipe://<inspect_command_output>"
理想情况下,您应该在系统或用户级别的环境变量中设置
DOCKER_HOST
(或者甚至在您选择的命令行模拟器初始化脚本中加载它)。
在 Windows 上设置 DOCKER_HOST
环境变量并非必需,因为 Podman 也会监听默认的 docker_engine
管道。但是,如果您在尝试使用 podman compose
命令时遇到以下错误,则可能需要设置它:Error: socket of machine is not set。
- 找到您的 Podman 套接字位置。
$ podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}'
- 将
DOCKER_HOST
环境变量设置为您的 Podman 套接字位置。请确保在之前获取的路径前添加unix://
协议
$ export DOCKER_HOST=unix://<your_podman_socket_location>
- 找到您的 Podman 套接字位置。
$ podman info --format '{{.Host.RemoteSocket.Path}}'
- 将
DOCKER_HOST
环境变量设置为您的 Podman 套接字位置。请确保在之前获取的路径前添加unix://
协议
$ export DOCKER_HOST=unix://<your_podman_socket_location>
验证
- 您的工具(如 Gradle 或 Testcontainers)使用
DOCKER_HOST
环境变量,无需重新配置即可与 Podman 通信。