如何在Docker容器中使用systemctl命令?修改配置后未生效求助
在Docker容器内使用systemctl的正确方法
直接手动修改容器的config.v2.json文件没用,Docker不会读取你事后修改的这个配置,甚至可能导致容器损坏,别这么干。下面是两种靠谱的实现方式:
创建新容器时直接配置
要让systemctl正常工作,容器需要获得足够权限,并且挂载systemd必需的cgroup文件系统,同时指定/sbin/init作为启动进程。执行以下命令创建容器:docker run -d --privileged --name my-systemd-container -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu:latest /sbin/init之后进入容器就能使用systemctl了:
docker exec -it my-systemd-container bash进去后试试
systemctl status,就能看到systemd正常运行了。给现有镜像安装systemd(如果镜像默认没有)
有些基础镜像比如Alpine、精简版Ubuntu默认不带systemd,需要先安装:
以Ubuntu/Debian为例,进入容器后执行:apt update && apt install -y systemd安装完成后,再按照上面的方式重新创建容器即可。
注意:不要同时使用Docker的--init参数和/sbin/init,两者会冲突,导致systemd无法正常启动。
内容的提问来源于stack exchange,提问作者MoreMore
相关产品推荐
相关产品推荐

