Linux 命令“systemctl status”在 Docker 容器内不起作用

Linux 命令“systemctl status”在 Docker 容器内不起作用

该命令systemctl status不起作用。从来没有。我的容器位于 CentOS 7 上。当我发出问题时,systemctl status我得到结果Failed to get D-Bus connection: operation not permitted.

回归

  1. 然后我考虑升级 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.
  2. 我尝试使用该-privileged标志创建一个新的 Docker 容器。当我使用该-p 80:80选项时,Docker run 命令失败。
  3. -p 80:80当我在命令中省略该选项时docker run,新容器也出现了同样的问题。
  4. 我创建了一个带有“选项的 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

相关内容