Windows上使用Podman替代Docker的完整记录

admin 2026-08-09 05:26:02 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细记录了在Windows上使用Podman替代DockerDesktop的完整过程,包括安装Windows终端、通过winget安装Podman客户端、配置虚拟硬盘位置、设置国内镜像加速器以及构建和运行容器的具体步骤。文章重点解决了Podman默认无根模式需切换为rootful、宿主机与容器网络通信等关键问题,并提供了实用的命令和配置示例,为开发者提供了可操作的迁移指南。 综合评分: 88 文章分类: 安全工具


cover_image

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&nbsp;tee&nbsp;/etc/containers/registries.conf <<'EOF'
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix =&nbsp;"docker.io"
location =&nbsp;"docker.io"

[[registry.mirror]]
location =&nbsp;"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&nbsp;--name vuln_nginx nginx:cve-2026-42533

#容器shell
podman&nbsp;exec&nbsp;-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 sshPodman Machine,虚拟机本身

podman exec -it vuln_nginx bash :容器shell

宿主机(Windows)直接访问的是 Podman Machine(虚拟机),而不是容器

如图:左容器,右虚拟机

如果在 Windows 的 WSL 中运行 Podman,需要检查 WSL 的 IP 地址,并可能需要额外配置端口转发。

(如果上面的情况已经可以解决,那下面可能就用不到了)

podman inspect vuln_nginx | findstr IPAddress
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"IPAddress":&nbsp;"10.88.0.11",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"IPAddress":&nbsp;"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 的完整记录》

评论:0   参与:  0