跳转到主内容

使用 DOCKER_HOST 环境变量

考虑使用 DOCKER_HOST 环境变量,在所有平台上实现从 Docker 到 Podman Desktop 的透明迁移。

  • 继续使用熟悉的 Docker 命令。
  • 享受 Podman 带来的好处。
  • 您的工具,例如 GradleTestcontainers,无需重新配置即可与 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

步骤

  1. 找到您的 Podman 管道位置
$ podman machine inspect --format '{{.ConnectionInfo.PodmanPipe.Path}}'
  1. 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

验证

  • 您的工具(如 GradleTestcontainers)使用 DOCKER_HOST 环境变量,无需重新配置即可与 Podman 通信。