使用 `/sbin/init` 时 `docker commit` 失败

使用 `/sbin/init` 时 `docker commit` 失败

我知道,我知道。想要servicectl在容器中访问是件坏事,我知道!

现在,这件事已经过去了,但我遇到了一个问题。当我做这样的事情时:

docker run -P --privileged --net=host --cidfile="/path/to/file.cid" -t -i --oom-kill-disable myimage /sbin/init

我做了一些事情,想要用这个命令提交:

docker commit -m 'Install This, configure that' 133c myimage

命令行等待、等待、等待。磁盘上没有写入,处理器和 RAM 上没有太多活动。如果我尝试docker ps,终端也会冻结(我的意思是,即使 CTRL+C 也不起作用)。

但如果我把第一个命令改成

docker run -P --privileged --net=host --cidfile="/path/to/file.cid" -t -i --oom-kill-disable /bin/bash

我做了相同的修改,然后提交并且它工作正常(但由于 D-Bus 问题我无法重新启动任何东西)。

该容器位于 CentOS 7.2 映像上,在 CentOS 主机和 Ubuntu 主机上遇到了同样的问题。

答案1

使用centos/systemd基础镜像,它包含systemdrpm。而不是systemd-container在 centos7 基础镜像中发现的特殊内容。

https://hub.docker.com/r/centos/systemd/

然后需要 cgroup 卷

    docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:systemd

相关内容