小迅的神奇海螺

在LXC中基于alpine使用podman的正确姿势

2022-08-10

起因

某一天,小迅在逛podman文档的时候,偶然间发现
picture 1

这玩意儿居然还能装在alpine里!?你要是说这个,俺可就不困了,搞起搞起

结果试试就逝世,没想到在alpine环境下,podman居然各种报错,算是把坑全给踩了一遍。好在经过几天的努力,也算是成功把podman跑了起来

配置流程

1、创建CT

镜像就直接选择最新的alpine-1.16,接着创建CT,不要取消勾选无特权的容器,开启嵌套FUSE

2、安装及配置

配置镜像源

1
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

安装podman

1
apk add --no-cache podman

解决cgroups问题

1
2
echo 'rc_cgroup_mode="unified"' >> /etc/rc.conf
echo 'pids_limit = 0' >> /etc/containers/containers.conf

重启

就是这么几行命令。然而,由于alpine系统精简的东西太多了,而且远程连接还需要自行安装openssh进行配置,稳定性没有保证。小迅不建议在生产环境像这样用

问题及解决方式

  • 报错:
1
ERRO[0000] 'overlay' is not supported over zfs at "/var/lib/containers/storage/overlay"

这个问题发生在zfs系统上,但是不用慌张,第一次调用的时候有可能是因为overlay没有挂载好,但实际上再次执行就不会报错了。如果解决不了,也可以像小迅一样,把PVE的系统盘换成ZFS格式

  • 报错:
1
Error: initializing source docker://hello-world:latest: pingingcontainer registry registry-1.docker.io: Get "https://registry-1docker.io/v2/": dial tcp: lookup registry-1.docker.io on 192.168.71:53: read udp 192.168.7.144:58955->192.168.7.1:53: i/o timeout

很简单,配置一下镜像源就ok了

1
2
3
4
5
6
7
cat > /etc/containers/registries.conf <<EOF
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "docker.mirrors.ustc.edu.cn"
EOF
  • 报错:
1
Error: OCI runtime error: crun: writing file \`/sys/fs/cgroup/libpod_parent/libpod-6bdf181a8f2e15dc7dcb0a6b335608e97e1f2f9a30c48f40e0c8d1cf70bb19e4/cgroup.procs`: Not supported

这个问题是由于alpine默认不启用cgroups v2引起的,修改/etc/rc.conf文件,设置rc_cgroup_mode="unified"
重启容器
picture 2

  • 报错:
1
Error: OCI runtime error: crun: the requested cgroup controller `pids` is not available

pid限制。修改/etc/containers/containers.conf文件,设置pids_limit = 0
picture 3

  • 警告:
1
WARN[0000] Failed to add conmon to cgroupfs sandbox cgroup: error creating cgroup path /libpod_parent/conmon: write /sys/fs/cgroup/cgroup.subtree_control: device or resource busy

众所周知,WARN不影响程序运行,所以不用管它

1
2
mkdir /sys/fs/cgroup/runtime
echo 1 > /sys/fs/cgroup/runtime/cgroup.procs

参考资料

Podman Installation Instructions
Cannot use podman inside lxc with nesting enabled
enabling cgroups v2

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章