私はこれを尋ねる質問 私はsystemd-udev-triggerが権限を持っているかどうかにかかわらず、dockerコンテナで実行してはいけないと思います。
dockerコンテナでsystemd-udev-triggerを実行する必要があるシナリオはいくつかありますか?
答え1
最初で最も具体的ではない答えは、systemd-udevがコンテナ内で実行されるように設計されていないことです。 Dockerはsystemdを実行するのではなく、デーモンを実行するだけです。
前述のコンテナイメージには、systemdの実行に関するガイドラインがあります。これには、権限のないコンテナ内で実行されるudevサービスを削除することが含まれます。ビルドプロセスの後はパッケージマネージャを使用しないでください。これはDockerコンテナ内で機能します。
特権コンテナでは、このガイドラインはudevも無効にするのに十分でなければならないと思います。私のFedora 26システムでは、これは静的ですsysinit.target
。コードがsysinit.target
。systemd-tmpfiles-setup.service
システム統合
Systemd は centos:7 および centos:latest デフォルトコンテナに含まれますが、デフォルトでは有効ではありません。 systemdを使用するには、次のDockerfileの例に似たテキストを含める必要があります。
システム基本イメージの Dockerfile
dockerfile 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/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]
このDockerfileは、問題を引き起こす可能性がある多くのユニットファイルを削除します。ここから基本画像を構築できます。
console $ docker build --rm -t local/c7-systemd .
システムサポートアプリケーションコンテナの例
上記で作成したデフォルトのsystemdサポートコンテナを使用するには、
Dockerfile
次のようなコンテナを作成する必要があります。
dockerfile FROM local/c7-systemd RUN yum -y install httpd; yum clean all; systemctl enable httpd.service EXPOSE 80 CMD ["/usr/sbin/init"]
次の画像をビルドしてください。
console $ docker build --rm -t local/c7-systemd-httpd .
システムサポートアプリケーションコンテナの実行
systemdでコンテナを実行するには、ホストシステムからcgroupsボリュームをマウントする必要があります。以下は、以前に作成したsystemdサポートhttpdコンテナを実行するコマンドの例です。
console $ docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 local/c7-systemd-httpd
コンテナはsystemdを使用して制限されたコンテキストで実行され、cgroupsファイルシステムがマウントされています。 Ubuntuホストを使用している場合は、
-v /tmp/$(mktemp -d):/run
cgroupに加えてインストールを追加する必要があるという報告があります。