Podman 迁移笔记
目录
最近把各个服务从 Debian 迁移到 Archlinux,顺便把 Docker+Compose 换成 Podman(无根)+Quadlet,期间遇到了一些奇怪问题,记录一下。
当 compose 中有容器间的依赖关系时,podlet compose –pod 生成的配置无法正常工作
podlet 生成时会将依赖关系转换为:
[Unit]
Requires=redis.service
After=redis.service
但是其中缺少了 pod 名称,导致 systemd 无法正确启动依赖的容器。 正确格式应该为:
[Unit]
Requires=<pod名>-redis.service
After=<pod名>-redis.service
这是 podlet(0.3.0 - 2024-05-21) 的 BUG,Github 代码中已经修复了,但是没有发布新版本。
可以手动修改 Quadlet 文件或者编译源码。
当然如果不使用 pod 就没有这个问题了。
容器中的文件挂载在本地后出现权限不一致的问题
这是容器内用户不是 root 用户导致的,可以在 podman run 命令中增加 --userns=keep-id
参数或者使用 compose 文件,在其中增加 userns_mode: keep-id
解决。
如果使用 quadlet pod 则 UserNS
配置只能写在 .pod 文件中,不能写在 pod 内部具体容器 .container 文件中。
当使用 pasta 作为无根容器的网络后端时(这是较新版本 podman 的默认行为),容器内无法通过公网 IP 访问宿主机
这是由于容器网络复制了宿主机的公网 IP,即容器的 IP 就是公网 IP,这导致了访问 <公网 IP>:端口 实际上是访问容器本身的端口,而不是宿主机 参考: