Ubuntu 22.04主机Docker容器内无法运行systemd的问题求助
Ubuntu 22.04主机Docker容器内无法运行systemd的问题求助
大家好,我最近在把一个容器化部署从Ubuntu 20.04主机迁移到Ubuntu 22.04主机时遇到了棘手的问题。这个容器里运行着systemd,在20.04机器上一切正常,但到了22.04主机上就直接报错,实在摸不着头绪,想请各位帮忙排查下原因。
在Ubuntu 20.04主机上的正常表现
我用以下命令启动容器:
$ docker run -i -d --name test-cvmfs-publisher-hs --rm --tmpfs /run:rw --tmpfs /tmp:rw --device /dev/fuse --volume "/sys/fs/cgroup:/sys/fs/cgroup:ro" --cap-add SYS_ADMIN --security-opt apparmor:unconfined cvmfs-stratum0_new
容器顺利启动,返回ID:432f62194e87996de7b0ee483b52f1306c13ebaf1a0065478032202fcd937fc1
进入容器后执行systemctl status,能正常看到systemd的运行状态:
$ docker exec -it test-cvmfs-publisher-hs bash [root@432f62194e87 /]# systemctl status ● 432f62194e87 State: degraded Jobs: 0 queued Failed: 1 units Since: Sat 2024-02-10 14:17:13 UTC; 7s ago CGroup: /docker/432f62194e87996de7b0ee483b52f1306c13ebaf1a0065478032202fcd937fc1 ├─ 1 /usr/sbin/init ├─ 88 bash ├─104 systemctl status ├─105 more └─system.slice ├─systemd-journald.service │ └─18 /usr/lib/systemd/systemd-journald ├─crond.service │ └─49 /usr/sbin/crond -n ├─httpd.service │ ├─66 /usr/sbin/httpd -DFOREGROUND │ ├─70 /usr/sbin/httpd -DFOREGROUND │ ├─71 /usr/sbin/httpd -DFOREGROUND │ ├─72 /usr/sbin/httpd -DFOREGROUND │ ├─73 /usr/sbin/httpd -DFOREGROUND │ └─74 /usr/sbin/httpd -DFOREGROUND ├─dbus.service │ └─41 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation ├─cvmfs-gateway.service │ └─60 /usr/bin/cvmfs_gateway └─systemd-logind.service └─37 /usr/lib/systemd/systemd-logind
在Ubuntu 22.04主机上的异常情况
我使用完全相同的镜像和启动命令在22.04主机上启动容器:
$ docker run -i -d --name test-cvmfs-publisher-hs --rm --tmpfs /run:rw --tmpfs /tmp:rw --device /dev/fuse --volume "/sys/fs/cgroup:/sys/fs/cgroup:ro" --cap-add SYS_ADMIN --security-opt apparmor:unconfined cvmfs-stratum0_new
容器也成功启动了,返回ID:127ed5f4833f41b7cb20e95b8752678a1a8195848358814ecbd4ca51b1b8efd9
但进入容器执行systemctl status时,直接抛出错误:
$ docker exec -it test-cvmfs-publisher-hs bash [root@127ed5f4833f /]# systemctl status Failed to get D-Bus connection: Operation not permitted
环境信息
两台主机都运行着Docker 25.0.3和containerd.io 1.6.28,唯一明显的区别就是Ubuntu的版本。我猜测会不会是内核相关的配置(比如cgroups)导致的问题?或者有没有什么细节是我漏掉的?
备注:内容来源于stack exchange,提问作者Nicola Mori




