
回归
>然后我研究了升级systemd.我删除了/etc/yum/protected.d/system.conf文件.然后我用yum删除systemd.我看到已经安装了systemd版本219-19.el7_2.4.我选择N实际上不删除systemd.然后我安装了systemd-libs-219-19.el7_2.7.x86_64.rpm.然后我安装了systemd版本2.7.然后我使用yum remove systemd来确定版本.我看到安装了systemd版本219-19.el7_2.7.我选择NO取消删除. systemctl状态仍然不起作用.我得到同样的错误:无法获得D-Bus连接:不允许操作.
>我尝试使用-privileged标志创建一个新的Docker容器.当我使用-p 80:80选项时,Docker运行命令失败.
>当我在docker run命令中省略了-p 80:80选项时,新容器也遇到了同样的问题.
>我创建了一个Docker容器,其中有一个docker run … -v / sys / fs / cgroup:/ sys / fs / cgroup:ro“选项.我遇到了同样的问题.
我希望systemctl状态在Docker容器中工作.
我该怎么做才能让systemctl状态在Docker容器中工作?
我跟着主要是 the Guide on CentOS Docker image project.
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
# Install anything. The service you want to start must be a SystemD service.
CMD ["/usr/sbin/init"]
现在,构建映像,并使用至少以下参数运行它到docker run命令:-v / run -v / sys / fs / cgroup:/ sys / fs / cgroup:ro
那么主要的一点是/usr/sbin / init必须是Docker容器中的第一个进程.
因此,如果要在运行/usr/sbin / init之前使用执行某些命令的自定义脚本,请使用exec /usr/sbin / init(在bash脚本中)在脚本末尾启动它.
这是一个例子:
ADD cmd.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/cmd.sh
CMD ["/usr/local/bin/cmd.sh"]
这是cmd.sh的内容:
#!/bin/bash
# Do some stuffs
exec /usr/sbin/init # To correctly start D-Bus thanks to https://forums.docker.com/t/any-simple-and-safe-way-to-start-services-on-centos7-systemd/5695/8
你可以让System启动.如果您使用PAM系统,请参阅pam_nologin(8),在这种情况下,删除Dockerfile中的/usr/lib/tmpfiles.d/systemd-nologin.conf,因为它会创建生成此特定错误的文件/ var / run / nologin .
转载注明原文:centos – Linux命令“systemctl status”在Docker容器中不起作用 - 乐贴网