我想在docker-compose中使用一个带有systemctl的图像,我在互联网https://github.com/solita/docker-systemd中看到这个图像,它工作正常,但当我尝试将它与docker-compose一起使用时,它不工作(它工作,但systemctl不工作,它给予这个错误“系统尚未启动,systemd作为init系统(PID 1)。无法操作。”)
test1:
container_name: 'test1'
build: './test'
volumes:
- /:/host
- /sys/fs/cgroup:/sys/fs/cgroup:ro
security_opt:
- "seccomp=unconfined"
tmpfs:
- /run
- /run/lock
privileged: true
构建文件为test.sh
#!/bin/sh
set -eu
if nsenter --mount=/host/proc/1/ns/mnt -- mount | grep /sys/fs/cgroup/systemd >/dev/null 2>&1; then
echo "The systemd cgroup hierarchy is already mounted at /sys/fs/cgroup/systemd."
else
if [ -d /host/sys/fs/cgroup/systemd ]; then
echo "The mount point for the systemd cgroup hierarchy already exists at /sys/fs/cgroup/systemd."
else
echo "Creating the mount point for the systemd cgroup hierarchy at /sys/fs/cgroup/systemd."
mkdir -p /host/sys/fs/cgroup/systemd
fi
echo "Mounting the systemd cgroup hierarchy."
nsenter --mount=/host/proc/1/ns/mnt -- mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd
fi
echo "Your Docker host is now configured for running systemd containers!"
2条答案
按热度按时间mrfwxfqh1#
如果你想在Docker中运行“systemctl”来启动/停止服务,那么你可以在没有systemd的情况下做到这一点。docker-systemctl-replacement就是为此而设计的。
yrefmtwq2#
如果你需要使用systemd,你可以遵循repo,它是用于Rockylinux的,但是你可以使用这个repo来为Ubuntu启用systemd
当你使用'docker run'时,你需要设置如下((启用rw)并使用docker exec连接到它。)
您可能会遇到其他与docker(对于timedatectl、loginctl等)或service命令中的systemd兼容的问题
您可以在将其迁移到停靠合成模式后