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 Desktop | Podman | 对本部署的影响 |
|---|---|---|---|
| 守护进程 | 常驻后台服务 | 无守护进程,按需启动 | Windows 重启后需先 podman machine start |
| 权限模型 | root 运行 | 默认 rootless(无 root) | 本容器必须用 rootful 模式(见 Step 3) |
| 开机自启 | restart: unless-stopped | systemd/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 版完全一致):
| 宿主机端口 | 容器端口 | 用途 |
|---|---|---|
| 1080 | 1080 | SOCKS5 代理 |
| 8888 | 8888 | HTTP/HTTPS 代理 |
| 5901 | 5901 | VNC 客户端 |
| 15901 | 8080 | noVNC 网页版 |
| 54632 | 54631 | aTrust 内部通信 |
想继续用 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 atrustStep 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:1080curl.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.tarStep 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 版运维命令对照
| 操作 | Docker | Podman |
|---|---|---|
| 启动 | docker compose up -d | systemctl start atrust(machine 内) |
| 日志 | docker logs -f atrust | podman logs -f atrust |
| 自启策略 | restart: unless-stopped | quadlet Restart=always |
| 前置动作 | 无(守护进程自启) | podman machine start |
| 数据备份 | docker run --rm -v ... tar | podman volume export atrust-data -o 文件 |
| 配置文件 | docker-compose.yml | /etc/containers/systemd/atrust.container |