从另一个 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 发行版
-
在您的 WSL 发行版中启动一个会话
> wsl --distribution your-distribution-name
-
要与远程 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' -
配置 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 名称和连接路径
-
确定 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 -
确定 Podman Desktop 使用的套接字。
Podman Desktop 默认使用有根 Podman。但是,请考虑确定活动套接字。
活动套接字是 Windows 会话中的 Podman 系统默认连接。
打开一个新的命令提示符,并列出您的 Podman 系统连接
> podman system connection list
默认连接行以 `true` 结尾。
通过 Windows 中的 URI 确定您的 Podman Machine 套接字
- 有根 Podman:`ssh://[email protected]:59292/run/podman/podman.sock`
- 无根 Podman:`ssh://[email protected]:59292/run/user/1000/podman/podman.sock`
示例输出
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 -
要定义 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`
-
WSL 发行版与 Podman Machine 之间的通信通道是一个特殊文件(套接字)。Podman Machine 使用特定权限创建此文件。要从 WSL 发行版与 Podman Machine 通信,您的用户必须对套接字具有写入权限。
要授予用户对远程 Podman 机器的访问权限:如果需要,请创建组,分配组成员身份,并在 WSL 发行版上退出会话以应用新的组成员身份
$ sudo usermod --append --groups 10 $(whoami)
$ exit
测试连接
验证 WSL 发行版中的 Podman CLI 是否与您的 Podman 机器通信。
-
在您的 WSL 发行版中启动一个会话
> wsl
-
验证您的用户是否是提供对远程 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
-
验证 Podman 默认系统连接是否设置为您的远程 Podman 机器
$ podman system connection list
-
验证 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/amd64info在您的环境中,Podman 版本可能会有所不同。
-
验证您是否可以列出正在运行的容器。
在您的 WSL 发行版上,启动一个容器,例如 `quay.io/podman/hello`,并列出最后一个运行容器的名称
$ podman run quay.io/podman/hello
$ podman ps -a --no-trunc --last 1在 Podman Desktop > 容器 上,输出将列出同一个容器(相同的名称,相同的镜像)。
更改连接
Podman Desktop 只能同时看到无根或有根容器,而不能同时看到两者。
要更改活动连接
-
在您的 Windows 终端中,更改连接
-
要将连接设置为无根
$ podman machine set --rootful=false
-
要将连接设置为有根
$ podman machine set --rootful=true
-
-
在您的 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
-
下一步
- 从您的 WSL 发行版中,使用容器。