コマンドsystemctl status
が機能していません。それはありません。私のコンテナはCentOS 7上にあります。systemctl status
を発行すると、結果が得られますFailed to get D-Bus connection: operation not permitted.
/etc/yum/protected.d/system.conf
ファイルを削除しました。次に、yum remove systemd
を使用しました。 systemdバージョン219-19.el7_2.4がインストールされていることがわかります。私は実際にsystemdを削除しないようにN
を選択します。次に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.
-privileged
フラグを使用して新しいDockerコンテナーを作成してみました。 -p 80:80
オプションを使用すると、Docker runコマンドが失敗しました。-p 80:80
コマンドでdocker run
オプションを省略したところ、新しいコンテナに同じ問題が発生しました。docker run ... -v /sys/fs/cgroup:/sys/fs/cgroup:ro
"オプションを使用してDockerコンテナーを作成しました。同じ問題が発生しました。私はsystemctl status
がDockerコンテナ内で動作することを期待しています。
systemctl status
をDockerコンテナで動作させるにはどうすればよいですか?
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
_
PAMシステムを使用している場合はSystem is booting up. See pam_nologin(8)
を使用できます。その場合、Dockerfile
の_/usr/lib/tmpfiles.d/systemd-nologin.conf
_を削除します。これは、この特定のエラーを生成するファイル_/var/run/nologin
_を作成するためです。 。
次のようにドッカーを実行してください、それは私にとってはうまくいきます、
docker run -it --privileged -p 10081:80 centos7 /bin/bash