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 状態がまだ機能していません。同じエラーが発生しました。Failed to get D-Bus connection: operation not permitted.
  2. -privilegedこのフラグを使用して新しいDockerコンテナを作成しました。このオプションを使用すると、-p 80:80Docker実行コマンドは失敗します。
  3. -p 80:80コマンドからオプションを省略すると、docker run新しいコンテナでも同じ問題が発生します。
  4. 「オプションを使用してDockerコンテナを作成しましたdocker run ... -v /sys/fs/cgroup:/sys/fs/cgroup:ro。また、同じ問題に直面しました。

systemctl statusDockerコンテナ内で作業したいです。

systemctl statusDockerコンテナで作業するにはどうすればよいですか?

答え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/initDockerコンテナの最初のプロセスでなければならないということです。

/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を実行します。これは私にとって効果的でした。

docker run -it --privileged -p 10081:80 centos7 /bin/bash

関連情報