Mic*_*ale 14 arch-linux systemd docker
我正在尝试查看是否可以在 docker 容器(在容器中运行 arch linux)中运行 systemd。
我启动 docker 的所有功能,并在 cgroups 中绑定 mount:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试运行 systemd 二进制文件:
Trying to run as user instance, but the system has not been booted with systemd.
Run Code Online (Sandbox Code Playgroud)
试图找出如何正确地将东西初始化到 systemd 开始。
这里是我的大师:D 在 ubuntu 的 docker 容器中运行 systemd :D 我让 Ubuntu 在 docker 中与 systemd 一起工作
我的 docker-systemd 容器的 GitHub 存储库
$ docker run -it --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro dockerimages/docker-systemd
Run Code Online (Sandbox Code Playgroud)
输出:
systemd 218 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN)
Detected virtualization 'docker'.
Detected architecture 'x86-64'.
Welcome to Ubuntu Vivid Vervet (development branch)!
Set hostname to <502ec40509a5>.
[ OK ] Created slice Root Slice.
[ OK ] Created slice System Slice.
Starting Emergency Shell...
[ OK ] Started Emergency Shell.
Startup finished in 5ms.
Welcome to emergency mode! After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or ^D to
try again to boot into default mode.
root@502ec40509a5:~# exit
Run Code Online (Sandbox Code Playgroud)
很多补丁被提交到不同的项目,比如 REDHAT 的 docker 上游存储库。更清楚的是,我的朋友 David Walsh @REDHAT 也发布了很多关于此的信息。 https://developers.redhat.com/blog/author/rhatdan/。
/run作为 tmpfs。
/sys/fs/cgroup只读。
/sys/fs/cgroup/systemd读/写。
/etc/machine-id需要包含 Uniqe MachineIDSIGRTMIN+3作为停止信号
,因为 sigterm 将不起作用
/var/log/journal如果它不存在,它将写入内存
docker run -d \
--tmpfs /tmp \
--tmpfs /run \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--stop-signal SIGRTMIN+3 \
httpd /sbin/init
Run Code Online (Sandbox Code Playgroud)
注意:当您的 dockerfile 包含时,可以删除 Stopsignal 标志 STOPSIGNAL SIGRTMIN+3
请参阅完整的帖子。https://developers.redhat.com/blog/2016/09/13/running-systemd-in-a-non-privileged-container/
注意:今天有了 Podman,在这里阅读它会更简单:https : //developers.redhat.com/blog/2019/04/24/how-to-run-systemd-in-a-container/
我能够从此向后工作:https://registry.hub.docker.com/u/codekoala/arch/
Docker 1.1 使这变得更容易,因为容器中已经提供了组 (ro) - 我目前仍然需要 priv 访问权限,以便它可以创建 PrivateTmp 挂载,但除此之外,只要您指定 cmd 作为 systemd 二进制文件运行 - 它就可以很好地工作。
| 归档时间: |
|
| 查看次数: |
38343 次 |
| 最近记录: |