我有 3 个集群要部署在使用 docker-compose 配置的容器上,每个集群有 3、4 和 14 个节点。所有容器都是从 Rocky Linux 8 的同一映像构建的,并且具有 SystemD,上面运行着多个服务。每个 docker-compose.yml/sys/fs/cgroup:/sys/fs/cgroup:ro
都添加到卷中。但是,无论我配置每个集群的顺序如何,我都只能在最先启动的 14 个容器上运行 SystemD。序列中的第 15 个容器以及之后的每个其他容器都会启动,但没有运行服务,并且 systemctl 给出错误,即:
# systemctl status sshd
Failed to connect to bus: No such file or directory
当我使用 docker exec 进入容器时,我可以看到 cgroup 挂载已到位,但ps aux
仅显示:
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 89084 7556 ? Ss 13:00 0:00 /usr/sbin/init
root 6 0.0 0.0 21324 3796 pts/0 Ss 13:03 0:00 bash
root 23 0.0 0.0 53952 3848 pts/0 R+ 13:15 0:00 ps aux
而好的容器则有更多:
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 171716 10104 ? Ss 13:00 0:00 /usr/sbin/init
root 28 0.0 0.0 89464 13432 ? Ss 13:00 0:00 /usr/lib/systemd/systemd-journald
rpc 30 0.0 0.0 67196 5596 ? Ss 13:00 0:00 /usr/bin/rpcbind -w -f
root 32 0.0 0.0 202388 14172 ? Ss 13:00 0:00 /usr/sbin/sssd -i --logger=files
root 45 0.0 0.0 78648 7028 ? Ss 13:00 0:00 /usr/sbin/sshd -D [email protected],[email protected],aes256-ctr
root 47 0.0 0.0 209484 7108 ? Ssl 13:00 0:00 /usr/sbin/rsyslogd -n
root 49 0.0 0.0 106028 3708 ? Ssl 13:00 0:00 /usr/sbin/gssproxy -D
dbus 61 0.0 0.0 76488 5424 ? Ss 13:00 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 62 0.0 0.0 212680 15516 ? S 13:00 0:00 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
root 63 0.0 0.1 224344 40632 ? S 13:00 0:00 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root 67 0.0 0.0 90364 7420 ? Ss 13:01 0:00 /usr/lib/systemd/systemd-logind
root 645 0.3 0.0 30364 3796 pts/0 Ss 13:15 0:00 bash
root 663 0.0 0.0 62992 3976 pts/0 R+ 13:15 0:00 ps aux
当我尝试在损坏的容器上启动 dbus-daemon 时出现此错误:
# /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
dbus-daemon[24]: Failed to start message bus: No socket received.
最让我困惑的是两件事:
- 它曾经在 CentOS 7 图像上运行良好,没有出现此类问题。
- 可以正确配置的容器的硬限制为 14 个。
回复 #2。如果我减少正在运行的容器数量,则损坏的容器在重新启动后会使 SystemD 工作,因此似乎在某处设置了限制,但我还找不到在哪里,因此任何有助于解释或解决此问题的评论或答案都将不胜感激。