跳至主要内容

从另一个 WSL 发行版访问 Podman

在 Windows 上,Podman Desktop 会创建一个 Windows Subsystem for Linux (WSL) 虚拟机:Podman Machine。它还会配置 Windows Podman 客户端以与 Podman Machine 通信。但是,它不会配置您的其他 WSL 发行版。

您可能正在运行其他 WSL 发行版,并且希望从那里访问您的 Podman Desktop 容器。

本教程侧重于最常见的上下文,引导您完成配置 WSL 发行版的步骤

  • Ubuntu Linux 发行版。
  • 默认 Podman Machine。

在可折叠的详细信息中,您可以找到针对不太常见上下文的替代步骤

  • 自定义 WSL 发行版。
  • 自定义 Podman Machine。

配置您的 WSL 发行版

  1. 在您的 WSL 发行版中启动一个会话

    > wsl --distribution your-distribution-name
  2. 要与远程 Podman Machine 通信,您需要一个 Podman 客户端。

    为了利用最新的功能,例如 `podman kube` 子命令,请使用最新的 Podman 版本,而不是发行版中的 `podman` 包。

    Podman 客户端可通过完整的 `podman` 安装或 4.x 及更高版本的 `podman-remote` 获取。在 Ubuntu 上,通常更容易安装 `podman-remote`。

    使用 `podman-remote`,您还可以默认启用远程模式。

    Podman 发行页面 检查包含 `podman-remote` 二进制文件的最新版本。

    下载并解压缩二进制文件

    $ wget https://github.com/containers/podman/releases/download/v4.9.1/podman-remote-static-linux_amd64.tar.gz
    $ sudo tar -C /usr/local -xzf podman-remote-static-linux_amd64.tar.gz

    使用以下添加到 `.bashrc` 的内容将此可执行文件设为 `podman`

    $ export PATH="$PATH:/usr/local/bin"
    $ alias podman='podman-remote-static-linux_amd64'
  3. 配置 WSL 发行版中的 Podman 客户端以与 Podman Desktop 定义的远程 Podman 机器通信。

    这将确保您在从所有不同环境中使用 Podman 时保持一致性

    将 Podman 系统默认连接设置为您的 Podman Machine(假设 Podman Desktop 配置了默认的 Podman Machine,并启用了 root 权限)

    $ podman system connection add --default podman-machine-default-root unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock

    在自定义 Podman Machine 上,远程 Podman Machine 目的地可能会有所不同。

    两个参数可能会更改

    • 机器名称可能与 `podman-machine-default` 不同。
    • 当 Podman 机器禁用了 root 权限(无根模式)时,套接字名称会有所不同。

    查找您的 Podman Machine 名称和连接路径

    1. 确定 WSL 发行版中可用的套接字。

      Podman 机器在名为 Podman 机器名称的 `mnt/wsl/podman-sockets/` 子目录中共享套接字。

      在您的 WSL 会话中,列出可用的套接字

      $ find /mnt/wsl/podman-sockets/ -name '*.sock'

      每个 Podman Machine 都有一个用于以下目的的套接字:

      • 有根 Podman:`podman-root.sock`
      • 无根 Podman:`podman-user.sock`

      示例输出

      /mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock
      /mnt/wsl/podman-sockets/podman-machine-default/podman-user.sock
    2. 确定 Podman Desktop 使用的套接字。

      Podman Desktop 默认使用有根 Podman。但是,请考虑确定活动套接字。

      活动套接字是 Windows 会话中的 Podman 系统默认连接。

      打开一个新的命令提示符,并列出您的 Podman 系统连接

      > podman system connection list

      默认连接行以 `true` 结尾。

      通过 Windows 中的 URI 确定您的 Podman Machine 套接字

      示例输出

      Name                         URI                                                          Identity                                                  Default

      podman-machine-default ssh://[email protected]:59292/run/user/1000/podman/podman.sock C:\Users\Podman Desktop User\.ssh\podman-machine-default false
      podman-machine-default-root ssh://[email protected]:59292/run/podman/podman.sock C:\Users\Podman Desktop User\.ssh\podman-machine-default true
    3. 要定义 Podman 机器远程目的地,请在 WSL 中可用的套接字路径前加上 `unix://`,并对应于 Podman Desktop 活动套接字

      对于默认的 Podman 机器

      • 有根 Podman:`unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock`
      • 无根 Podman:`unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-user.sock`
  4. WSL 发行版与 Podman Machine 之间的通信通道是一个特殊文件(套接字)。Podman Machine 使用特定权限创建此文件。要从 WSL 发行版与 Podman Machine 通信,您的用户必须对套接字具有写入权限。

    要授予用户对远程 Podman 机器的访问权限:如果需要,请创建组,分配组成员身份,并在 WSL 发行版上退出会话以应用新的组成员身份

    $ sudo usermod --append --groups 10 $(whoami)
    $ exit

测试连接

验证 WSL 发行版中的 Podman CLI 是否与您的 Podman 机器通信。

  1. 在您的 WSL 发行版中启动一个会话

    > wsl
  2. 验证您的用户是否是提供对远程 Podman Machine 套接字访问权限的组的成员

    $ groups

    在默认的 Ubuntu WSL 上,列表包含 `uucp` 组。

    在自定义 WSL 发行版上,组名称可能有所不同。

    查找所需的组名

    所需的组 ID 在任何 WSL 发行版上都相同。

    但是,组名在自定义 WSL 发行版上可能会有所不同。

    在运行 Fedora 发行版的 Podman Machine 上

    • 有根 Podman:GID `10` 的名称为 `wheel`。
    • 无根 Podman:GID `1000` 的名称为 `user`。

    在 Ubuntu 发行版上

    • 有根 Podman:GID `10` 的名称为 `uucp`。
    • 无根 Podman:GID `1000` 的名称与您在创建 WSL 机器时选择的用户名相同。

    在自定义 WSL 发行版上,查找以下内容的组名:

    • 有根 Podman

      $ getent group 10
    • 无根 Podman

      $ getent group 1000
  3. 验证 Podman 默认系统连接是否设置为您的远程 Podman 机器

    $ podman system connection list
  4. 验证 Podman 是否具有与您的 Podman Machine 版本相对应的 `Server` 版本

    $ podman version

    示例输出

    Client:
    Version: 3.4.4
    API Version: 3.4.4
    Go Version: go1.18.1
    Built: Thu Jan 1 01:00:00 1970
    OS/Arch: linux/amd64

    Server:
    Version: 4.8.3
    API Version: 4.8.3
    Go Version: go1.21.5
    Built: Wed Jan 3 15:11:40 2024
    OS/Arch: linux/amd64
    info

    在您的环境中,Podman 版本可能会有所不同。

  5. 验证您是否可以列出正在运行的容器。

    在您的 WSL 发行版上,启动一个容器,例如 `quay.io/podman/hello`,并列出最后一个运行容器的名称

    $ podman run quay.io/podman/hello
    $ podman ps -a --no-trunc --last 1

    Podman Desktop > 容器 上,输出将列出同一个容器(相同的名称,相同的镜像)。

更改连接

Podman Desktop 只能同时看到无根或有根容器,而不能同时看到两者。

要更改活动连接

  1. 在您的 Windows 终端中,更改连接

    • 要将连接设置为无根

      $ podman machine set --rootful=false
    • 要将连接设置为有根

      $ podman machine set --rootful=true
  2. 在您的 WSL 会话中,更改 Podman 系统连接配置

    • 要将连接设置为无根

      $ podman system connection add --default podman-machine-default-user unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-user.sock
    • 要将连接设置为有根

      $ podman system connection add --default podman-machine-default-root unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock

下一步