aTrust 容器部署向导 — Podman Version

从零开始:安装 WSL2 → 安装 Podman → 创建 rootful 虚拟机 → 部署 aTrust 容器 → 登录 → 使用代理。
镜像:docker.io/hagb/docker-atrust(多架构:amd64 + arm64,x86 和 ARM 版 Windows 都能跑)。
与 Docker 版功能完全一致:noVNC 登录 aTrust 客户端,SOCKS5/HTTP 代理对外提供内网出口。

为什么有几处和 Docker 不一样?(先读 30 秒)

差异点Docker DesktopPodman对本部署的影响
守护进程常驻后台服务无守护进程,按需启动Windows 重启后需先 podman machine start
权限模型root 运行默认 rootless(无 root)本容器必须用 rootful 模式(见 Step 3)
开机自启restart: unless-stoppedsystemd/quadlet 容器内实现用 quadlet 配置文件代替 compose 的 restart
数据持久化named volume同样支持 named volume写法基本不变

必须 rootful 的原因:容器需要 net.ipv4.conf.default.route_localnet=1 这个内核参数——它不是命名空间参数,rootless 无权设置,启动会直接报 permission denied。同时 /dev/net/tun + NET_ADMIN 在 rootful 下最稳妥。


Step 1 — 安装 WSL2(Podman machine 的地基)

以管理员身份打开 PowerShell:

wsl --install --no-distribution
wsl --update
wsl --set-default-version 2
可能要求重启电脑,重启后继续。
验证:wsl --version 能输出 WSL 版本号即可。

Step 2 — 安装 Podman

方式一(推荐,winget):

winget install -e --id RedHat.Podman

方式二(手动):到 https://github.com/containers/podman/releases 下载最新 podman-x.y.z-setup.exe 双击安装。

安装后新开一个终端验证:

podman --version    # 例如 podman version 5.x.x
🍎 ARM 版 Windows 用户:WSL2 在 ARM64 上完全可用;若 podman machine 初始化遇到问题(个别版本的 machine 镜像对 ARM 支持不一),改用备选路径——先 wsl --install -d Ubuntu-24.04,进入 Ubuntu 后用 Linux 原生命令安装(sudo apt install podman,Fedora 系用 sudo dnf install podman),之后本向导的 quadlet 步骤在 WSL 内同样执行(此时跳过 Step 3 的 machine 部分)。

Step 3 — 创建 rootful 虚拟机(关键步骤)

# --rootful 是重点,别漏
podman machine init --rootful
podman machine start

验证权限模式与 tun 设备:

podman info --format "{{.Host.Security.Rootless}}"   # 必须输出 false
podman machine ssh "ls -l /dev/net/tun"              # 应存在;若无:
podman machine ssh "sudo modprobe tun"
rootless 时 Rootless 会输出 true——那就要重来 podman machine rm -f 后带 --rootful 再 init。

Step 4 — 写入 quadlet 配置(代替 docker-compose.yml,自带开机自启)

quadlet 是 Podman 原生的 systemd 容器单元,等价于 compose 文件 + restart: unless-stopped。

一条命令把配置写进虚拟机(在 Windows PowerShell 中执行,整段复制):

podman machine ssh "sudo tee /etc/containers/systemd/atrust.container > /dev/null" @"
[Container]
Image=docker.io/hagb/docker-atrust:latest
ContainerName=atrust
Device=/dev/net/tun
AddCapability=NET_ADMIN
Sysctl=net.ipv4.conf.default.route_localnet=1
Environment=PASSWORD=123456
Environment=URLWIN=1
Environment=USE_NOVNC=1
Environment=PING_INTERVAL=1800
Volume=atrust-data:/root
PublishPort=127.0.0.1:1080:1080
PublishPort=127.0.0.1:8888:8888
PublishPort=127.0.0.1:5901:5901
PublishPort=127.0.0.1:15901:8080
PublishPort=127.0.0.1:54632:54631

[Service]
Restart=always

[Install]
WantedBy=default.target
"@

改两处再用:

  • PASSWORD= 换成你自己的强密码;
  • PublishPort=127.0.0.1:54632:54631——若宿主机没跑原生 aTrust 客户端,可改回 54631:54631;被占用就保持 54632 或换别的。

端口速查(与 Docker 版完全一致):

宿主机端口容器端口用途
10801080SOCKS5 代理
88888888HTTP/HTTPS 代理
59015901VNC 客户端
159018080noVNC 网页版
5463254631aTrust 内部通信
想继续用 compose 文件也可以:pip install podman-compose 后 podman-compose up -d,
或 podman compose up -d(Podman 5.x 会委托给已安装的 compose 提供器)。
但 compose 没有 restart 持久化,quadlet 才是 Podman 的正统做法。

Step 5 — 启动服务

podman machine ssh "sudo systemctl daemon-reload"
podman machine ssh "sudo systemctl start atrust"

首次启动会自动拉取镜像(约 2GB,多架构清单,x86/ARM 自动匹配)。查看进度:

podman logs -f atrust

Step 6 — 验证

podman ps --filter name=atrust        # 状态 Up
podman machine ssh "systemctl status atrust --no-pager"   # active (running)

# Windows 侧验证 noVNC
curl.exe -s -o NUL -w "HTTP %%{http_code}`n" http://127.0.0.1:15901/
netstat -ano | findstr ":1080 :8888 :15901 :5901"
❗ 排坑:端口在虚拟机里通、Windows 里不通——podman machine 通过 gvproxy 把发布端口转发到 Windows 的 localhost。若加了 127.0.0.1: 前缀后 Windows 侧访问不到,把 quadlet 里五条 PublishPort 的 127.0.0.1: 前缀去掉(Podman 会绑定虚拟机所有接口,gvproxy 仍只向 Windows localhost 转发),改完 systemctl restart atrust。

Step 7 — 首次登录

浏览器打开 http://127.0.0.1:15901 → 连接 localhost:5901 → 输入 PASSWORD →
在 aTrust 客户端界面填写服务器地址、账号密码完成登录。


Step 8 — 使用代理

HTTP/HTTPS 代理:127.0.0.1:8888
SOCKS5 代理:  127.0.0.1:1080
curl.exe -x http://127.0.0.1:8888 http://内网地址/
curl.exe --socks5 127.0.0.1:1080 http://内网地址/
curl.exe -x http://127.0.0.1:8888 http://httpbin.org/ip   # 验证出口

Step 9 — 日常运维

# 容器层
podman logs -f atrust
podman restart atrust
podman stop atrust / podman start atrust

# 虚拟机层(Windows 重启后必做第一步)
podman machine start          # 停止:podman machine stop

# 更新镜像
podman pull docker.io/hagb/docker-atrust:latest
podman machine ssh "sudo systemctl restart atrust"

让虚拟机开机自动启动(容器自身已由 quadlet Restart=always 管理):
创建计划任务,在登录时执行 podman machine start:

schtasks /Create /TN "PodmanMachineStart" /SC ONLOGON /RL HIGHEST ^
  /TR "podman machine start"

备份数据卷(Podman 原生命令,比 Docker 还方便):

podman volume export atrust-data -o C:\atrust\atrust-backup.tar
# 恢复:
podman volume import atrust-data C:\atrust\atrust-backup.tar

Step 10 — 常见问题

问题处理
启动报 sysctl ... permission denied当前是 rootless 模式。podman machine rm -f 后 podman machine init --rootful 重建
报 tun 设备错误podman machine ssh "sudo modprobe tun",确认 quadlet 有 Device=/dev/net/tun
ports are not available宿主机端口被占用(如原生 aTrust 占 54631),改 quadlet 里 PublishPort 宿主端口
Windows 访问不到端口见 Step 6 排坑:去掉 127.0.0.1: 前缀重试
电脑重启后容器没了正常——Podman 无守护进程。先 podman machine start,容器由 quadlet 自动拉起;或按 Step 9 配置开机任务
代理不通先确认 noVNC 里客户端显示"已连接";再查 54631 映射和 route_localnet sysctl
ARM 版 Windows init 失败改走 Step 2 的备选路径:WSL 发行版内直接装 podman(Ubuntu 24.04 的 apt 源即有)

附:与 Docker 版运维命令对照

操作DockerPodman
启动docker compose up -dsystemctl start atrust(machine 内)
日志docker logs -f atrustpodman logs -f atrust
自启策略restart: unless-stoppedquadlet Restart=always
前置动作无(守护进程自启)podman machine start
数据备份docker run --rm -v ... tarpodman volume export atrust-data -o 文件
配置文件docker-compose.yml/etc/containers/systemd/atrust.container
最后修改:2026 年 09 月 26 日
如果觉得我的文章对你有用,请赞赏