「故事会」令 userns=keep-id 并以 bind 模式挂载卷可能导致 Podman Rootless 容器启动缓慢

2024-04-17, 星期三, 16:44

TroubleshootingContainer故事会

需要部署一套 CMS 系统,服务器上的容器运行时是 Podman,故执行命令:

$ podman run --name directus --rm --userns=keep-id --user node \
-p 8055:8055 \
--mount type=bind,src=/opt/d/database,dst=/directus/database,U=true,relabel=shared \
--mount type=bind,src=/opt/d/uploads,dst=/directus/uploads,U=true,relabel=shared \
....
docker.io/directus/directus:10.10.5

若干分钟后容器还没有成功运行起来,也没有任何输出。执行 podman 相关的命令,程序无响应,查看系统的资源占用,没发现其他异常。

搜索发现有人提出了同样的问题,不过我的情况有些不一样,只要去掉挂载卷的动作,执行的时间似乎就能显著缩短。

$ time podman run --rm --userns=keep-id docker.io/directus/directus:10.10.5
real    0m22.637s
user    0m0.119s
sys     0m0.066s

按照 slow (minutes delay) start when rinning with --userns=keep-id #11220 的说法,Podman 在设置 --userns=keep-id 时会对实际的存储层做 chown 操作,也许这个动作造成了启动缓慢。

此外帖子还建议对 $HOME/.config/containers/storage.conf 进行修改:

[storage]
driver = "overlay"

[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"

服务器上没有这个文件,所以实际生效的应该是 /etc/containers/storage.conf。顺便一提,如果使用的 Rootful 模式,/usr/share/containers/storage.conf 中的配置具有更高的优先级。