WSL2 Ubuntu环境下Testcontainers搭配Podman使用的配置问题
WSL2 Ubuntu环境下Podman对接Testcontainers配置方案
优先推荐方案:本地Ubuntu Podman直连(无跨实例兼容问题)
这个方案不需要依赖Windows端安装的Podman和独立的Fedora WSL实例,直接解决跨发行版套接字对接、镜像不同步的问题,步骤如下:
- 先安装Podman的Docker兼容包,解决
No Docker client strategy found报错:sudo apt update && sudo apt install -y podman podman-dockerpodman-docker会自动创建docker命令到podman的软链接,完全兼容Docker CLI调用规范,Testcontainers的客户端探测逻辑可以直接识别。 - WSL2默认未开启systemd的情况下,不需要折腾systemctl,直接手动启动rootless模式的Podman服务即可,执行以下命令启动后台服务:
其中podman system service --time=0 unix:///run/user/$(id -u)/podman/podman.sock &--time=0参数禁止服务空闲超时自动退出,末尾的&将进程放到后台运行。如果需要WSL启动时自动拉起服务,把这行命令追加到~/.bashrc(对应bash shell)或~/.zshrc(对应zsh shell)文件末尾即可。 - 配置Testcontainers依赖的环境变量:
export DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock - 权限配置(启动时报套接字权限错误再执行):
执行完退出当前WSL终端重新进入即可生效。sudo usermod -aG podman $USER - 验证:执行
docker info能正常返回Podman运行信息就代表配置完成,此时本地Ubuntu环境下podman构建的镜像直接存储在当前实例内,Testcontainers可以直接读取,不会出现镜像找不到的问题。
备选方案:对接Windows Podman自带的Fedora WSL实例
如果需要复用已有的Fedora端Podman服务,按以下步骤配置即可解决连接异常、镜像不同步问题:
- 清理错误连接配置:先执行
podman system connection ls列出所有已配置的远程连接,用podman system connection rm <错误连接名>删除之前配置的无效连接。 - 正确添加Fedora实例的SSH连接:
- 先在Windows PowerShell中执行
wsl -l确认Podman安装的Fedora发行版名称,默认名称为podman-machine-default,确认该实例已开启SSH服务、sshd进程正常运行。 - 在Ubuntu环境中执行以下命令建立SSH套接字隧道,将Fedora端的Podman套接字转发到本地:
ssh -i ~/.ssh/podman-machine-default -o StrictHostKeyChecking=no -L /tmp/fedora-podman.sock:/run/user/1000/podman/podman.sock core@localhost -p $(wsl.exe -d podman-machine-default -- sh -c "ss -tulpn | grep sshd | grep -oP ':\K\d+' | head -n1") -N & - 配置环境变量指向本地转发的套接字:
export DOCKER_HOST=unix:///tmp/fedora-podman.sock
- 先在Windows PowerShell中执行
- 解决镜像找不到的问题,两种方式选其一即可:
- 构建镜像时指定远程连接,直接将镜像构建在Fedora实例存储中:
podman --remote -H unix:///tmp/fedora-podman.sock build -t 你的镜像标签:版本 . - 本地Ubuntu端构建完镜像后,通过podman save/load命令将镜像同步到Fedora实例:
# 本地导出镜像 podman save 你的镜像标签:版本 -o image.tar # 导入到Fedora端Podman(注意替换成你实际的image.tar存放路径) wsl.exe -d podman-machine-default -- podman load -i /mnt/host/c/Users/你的用户名/image.tar
- 构建镜像时指定远程连接,直接将镜像构建在Fedora实例存储中:
之前连接返回本地数据集的原因
之前配置连接后返回本地数据,核心原因是没有将添加的远程连接设置为默认连接,podman CLI默认调用本地的podman服务,自然返回本地存储的数据集。如果用podman system connection add添加连接,需要额外执行podman system connection default <你的远程连接名>切换默认连接到远程实例才会生效。
内容的提问来源于stack exchange,提问作者chaosbohne
相关产品推荐
相关产品推荐

