从另一个 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
安装获得,或通过podman-remote
4.x 及更高版本获得。在 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 machine 通信。
这将确保您在所有不同环境中处理 Podman 时的一致性
将默认的 Podman 系统连接设置为您的 Podman Machine(假设 Podman Desktop 配置为默认的、启用了 root 权限的 Podman Machine)
$ 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 machine 禁用了 root 权限(rootless 模式)时,socket 名称会不同。
查找您的 Podman Machine 名称和连接路径
- 识别您 WSL 发行版中可用的 socket。
Podman machine 在一个名为 Podman machine 名称的
/mnt/wsl/podman-sockets/
子目录中共享 socket。在您的 WSL 会话中,列出可用的 socket
$ find /mnt/wsl/podman-sockets/ -name '*.sock'
每个 Podman Machine 都有一个用于以下目的的 socket
- Rootful Podman:
podman-root.sock
- Rootless 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 使用的 socket。
Podman Desktop 默认为 rootful Podman。但是,建议识别活动的 socket。
活动的 socket 是您 Windows 会话中的默认 Podman 系统连接。
打开一个新的命令提示符,并列出您的 Podman 系统连接
> podman system connection list
默认连接行以
true
结尾。通过其在 Windows 中的 URI 识别您的 Podman Machine socket
- Rootful Podman:
ssh://root@127.0.0.1:59292/run/podman/podman.sock
- Rootless Podman:
ssh://user@127.0.0.1:59292/run/user/1000/podman/podman.sock
示例输出
Name URI Identity Default
podman-machine-default ssh://user@127.0.0.1:59292/run/user/1000/podman/podman.sock C:\Users\Podman Desktop User\.ssh\podman-machine-default false
podman-machine-default-root ssh://root@127.0.0.1:59292/run/podman/podman.sock C:\Users\Podman Desktop User\.ssh\podman-machine-default true - Rootful Podman:
-
要定义 Podman machine 的远程目标,请在您 WSL 中可用的、并与 Podman Desktop 活动 socket 对应的 socket 路径前加上
unix://
对于默认的 Podman machine
- Rootful Podman:
unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock
- Rootless Podman:
unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-user.sock
- Rootful Podman:
- 机器名称可能与
-
您的 WSL 发行版与 Podman Machine 之间的通信通道是一个特殊文件(一个 socket)。Podman Machine 创建此文件时带有特定的权限。为了从您的 WSL 发行版与 Podman Machine 通信,您的用户必须对该 socket 拥有写权限。
要让您的用户访问远程 Podman machine:如有必要,创建用户组,分配组成员资格,然后退出您在 WSL 发行版上的会话以应用新的组成员资格
$ sudo usermod --append --groups 10 $(whoami)
$ exit
测试连接
验证在您的 WSL 发行版上,Podman CLI 是否能与您的 Podman machine 通信。
-
在您的 WSL 发行版中启动一个会话
> wsl
-
验证您的用户是提供对远程 Podman Machine socket 访问权限的用户组的成员
$ groups
在默认的 Ubuntu WSL 上,列表包含
uucp
组。在自定义的 WSL 发行版上,组名可能会有所不同。
查找所需的组名
在任何 WSL 发行版上,所需的组 ID 都是相同的。
但是,在自定义的 WSL 发行版上,组名可能会有所不同。
在运行于 Fedora 发行版上的 Podman Machine 中
- Rootful Podman:GID
10
名称是wheel
。 - Rootless Podman:GID
1000
名称是user
。
在 Ubuntu 发行版中
- Rootful Podman:GID
10
名称是uucp
。 - Rootless Podman:GID
1000
的名称与您创建 WSL machine 时选择的用户名相同。
在自定义的 WSL 发行版上,查找以下项的组名
-
Rootful Podman
$ getent group 10
-
Rootless Podman
$ getent group 1000
- Rootful Podman:GID
-
验证 Podman 默认系统连接已设置为您的远程 Podman machine
$ podman system connection list
-
验证 Podman 的
Server
版本与您的 Podman Machine 版本相对应$ 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信息在您的环境中,Podman 版本可能会有所不同。
-
验证您可以列出正在运行的容器。
在您的 WSL 发行版上,启动一个容器,例如
quay.io/podman/hello
,并列出最后一个运行容器的名称$ podman run quay.io/podman/hello
$ podman ps -a --no-trunc --last 1在 Podman Desktop > Containers 中,输出会列出相同的容器(相同的名称,相同的镜像)。
更改连接
Podman Desktop 只能看到 rootless 或 rootful 容器,不能同时看到两者。
要更改活动连接
-
在您的 Windows 终端中,更改连接
-
要将连接设置为 rootless
$ podman machine set --rootful=false
-
要将连接设置为 rootful
$ podman machine set --rootful=true
-
-
在您的 WSL 会话中,更改 Podman 系统连接配置
-
要将连接设置为 rootless
$ podman system connection add --default podman-machine-default-user unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-user.sock
-
要将连接设置为 rootful
$ podman system connection add --default podman-machine-default-root unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock
-
后续步骤
- 从您的 WSL 发行版,使用容器。