该命令systemctl status
不起作用。从来没有。我的容器位于 CentOS 7 上。当我发出问题时,systemctl status
我得到结果Failed to get D-Bus connection: operation not permitted.
回归
- 然后我考虑升级 systemd。我删除了该
/etc/yum/protected.d/system.conf
文件。然后我用了yum remove 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 status 仍然不起作用。我犯了同样的错误:Failed to get D-Bus connection: operation not permitted.
- 我尝试使用该
-privileged
标志创建一个新的 Docker 容器。当我使用该-p 80:80
选项时,Docker run 命令失败。 -p 80:80
当我在命令中省略该选项时docker run
,新容器也出现了同样的问题。- 我创建了一个带有“选项的 Docker 容器
docker run ... -v /sys/fs/cgroup:/sys/fs/cgroup:ro
。我也遇到了同样的问题。
我希望systemctl status
在 Docker 容器内工作。
我应该怎么做才能systemctl status
在 Docker 容器中工作?
答案1
我已经成功在 CentOS:7 Docker 容器中解决了这个问题。我主要关注的是CentOS Docker 镜像项目指南。
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 is booting up. See pam_nologin(8)
如果您使用 PAM 系统,在这种情况下,您可以删除/usr/lib/tmpfiles.d/systemd-nologin.conf
您的文件,因为它会创建生成此特定错误的Dockerfile
文件。/var/run/nologin
答案2
按如下方式运行泊坞窗,这对我有用,
docker run -it --privileged -p 10081:80 centos7 /bin/bash