文章总结: 本文详细记录了在Windows上使用Podman替代DockerDesktop的完整过程,包括安装Windows终端、通过winget安装Podman客户端、配置虚拟硬盘位置、设置国内镜像加速器以及构建和运行容器的具体步骤。文章重点解决了Podman默认无根模式需切换为rootful、宿主机与容器网络通信等关键问题,并提供了实用的命令和配置示例,为开发者提供了可操作的迁移指南。 综合评分: 88 文章分类: 安全工具
Windows 上使用 Podman 替代 Docker 的完整记录
原创
羽泪云小栈 羽泪云小栈
羽泪云小栈
2026年7月27日 15:54 陕西
在小说阅读器读本章
去阅读
Podman
作为docker-dektop的平替,毕竟有时候老是卡在starting的界面,没有找到什么好的方法
Starting the Docker Engine...
Docker Engine is the underlying technology that runs containers
Windows 上 podman machine 默认无根(rootless)模式,容器内部默认非 root 用户;我们编译 Nginx 需要root权限、需要绑定低端口、gdb 调试,必须切换 rootful
网络:默认仅 127.0.0.1 互通,局域网访问需要额外端口转发;但本地 curl 测试不受影响
架构:podman machine 底层依然是轻量 Linux 虚拟机(和 Docker Desktop 原理类似,不会突然卡在Starting Docker Engine那个初始化死锁)
Dockerfile 完全兼容
下载处:
https://github.com/podman-container-tools/podman
1.windows终端
#powershell 管理员下
winget install Microsoft.WindowsTerminal
可要可不要,比起普通的终端,优点如下:
支持多标签、分屏、自定义字体、透明度,同时打开多个 podman 终端(一边构建镜像,一边进入容器 gdb 调试)。
1.直接按 Ctrl + Shift + T,就能在当前窗口打开一个新的标签页。(包括但不限于cmd、powershell、ubuntu等)
2.按 Ctrl + Tab 可以向右切换,按 Ctrl + Shift + Tab 向左切换。
Alt + Shift + D 垂直分屏 或 Alt + Shift + - (水平分屏)。按 Alt + 方向键 可以在各个分屏间移动焦点。
3.打开方式:开始菜单搜索 终端 或 windows terminal
4.设置默认打开:
设置→默认应用程序→ 选”windows终端”
记得点保存,这样的话,无论以后是打开cmd、还是powershell等,都会自动套有windows terminal壳的效果。
其它常见唤醒:
键盘上的 Win + R 键,打开运行对话框,输入 wt 然后回车
效果如下:
2.Podman Windows 客户端 RedHat.Podman
#命令行安装(在C盘,more设置好全局)
winget install RedHat.Podman
#手动安装 (自定义安装,但后续全局需要自己设置)
https://github.com/containers/podman/releases
设置vhdx这个虚拟硬盘文件位置(因为文件可能会很大,所以不放C盘,放D盘)
$targetDir = "D:\WSL\podman-machine"
$cPodmanPath = "$HOME\.local\share\containers\podman\machine\wsl\wsldist"
# 创建D盘目录
New-Item -Path $targetDir -ItemType Directory -Force
# 如果C盘目录已存在先删除
if(Test-Path $cPodmanPath){Remove-Item $cPodmanPath -Recurse -Force}
# 创建目录联接(Junction)
New-Item -ItemType Junction -Path $cPodmanPath -Target $targetDir
在podman的bin目录中,powershell初始化:
.\podman machine init --rootful --disk-size 100
.\podman machine start
.\podman info
它好像默认是rootless的,可以用rootful
添加成全局变量
# podman.exe 所在bin目录
$podmanPath = "D:\Podman\podman-6.0.2\usr\bin"
# 获取当前系统PATH
$sysPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
# 判断是否已经存在,避免重复添加
if (-not $sysPath.Contains($podmanPath)) {
$newPath = "$podmanPath;$sysPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
Write-Host "已将 $podmanPath 写入系统PATH"
} else {
Write-Host "路径已存在,无需重复添加"
}
3.配置国内加速器
推荐开tun模式解决。
如果找到可用的国内源,就配置如下:
cmd下,
podman machine ssh
sudo tee /etc/containers/registries.conf <<'EOF'
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "docker.io"
[[registry.mirror]]
location = "https://xxxx"
EOF
重启服务
exit
podman machine stop
podman machine start
在执行podman build时可能出现:
C:xxxxxx\AppData\\Roaming\\containers\\registries.conf": invalid location 'https://xxx': URI schemes are not supported
需要把这个conf文件中的https://去掉
4.其它
#构建容器
podman build -t nginx:cve-2026-42533 .
#容器运行,--rm 一停止就会删除
podman run -p 8999:8999 --rm --name vuln_nginx nginx:cve-2026-42533
#容器shell
podman exec -it vuln_nginx bash
apt update && apt install -y net-tools
#可以使用命令如ifconfig、netstat等
修改 Podman Machine 内部 Linux 的主机名
sudo hostnamectl set-hostname 你想要的主机名
注意主机名如果有下划线如_,默认没有
5.windows宿主机通信检查
会面临容器启动时,宿主机无法curl访问的问题
宿主机无法访问
后面发现是自己进错shell了,不是容器shell,而是虚拟机shell,
命令为:podman machine ssh
然后
ip addr即可
curl http://172.25.71.34:8999,访问成功
区别在于
podman machine ssh:Podman Machine,虚拟机本身
podman exec -it vuln_nginx bash :容器shell
宿主机(Windows)直接访问的是 Podman Machine(虚拟机),而不是容器
如图:左容器,右虚拟机
如果在 Windows 的 WSL 中运行 Podman,需要检查 WSL 的 IP 地址,并可能需要额外配置端口转发。
(如果上面的情况已经可以解决,那下面可能就用不到了)
podman inspect vuln_nginx | findstr IPAddress
"IPAddress": "10.88.0.11",
"IPAddress": "10.88.0.11",
#旧规则删除
netsh interface portproxy delete v4tov4 listenport=8999 listenaddress=*
#管理员模式下cmd
netsh interface portproxy add v4tov4 listenport=8999 listenaddress=0.0.0.0 connectport=8999 connectaddress=10.88.0.11
#显示规则
netsh interface portproxy show all
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:羽泪云小栈 羽泪云小栈 羽泪云小栈《Windows 上使用 Podman 替代 Docker 的完整记录》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论