centos 7
Docker HubからDockerイメージをダウンロードしました。サーバーでsshdを有効にしようとすると、sshサービスを有効にできません。
私の問題を再現する手順は次のとおりです。
docker pull centos
docker run -i -d --name testSSH centos /bin/bash
docker exec -it testSSH /bin/bash
centosボックスに入った後、次のコマンドを実行しました。
yum install openssh-server
ssh-keygen
ssh-keygen -t rsa
yum install -y initscripts
service start sshd
service sshd start
これで、次のエラーメッセージが表示されます。
[root@f9e4d1efcfd9 /]# service sshd start
Redirecting to /bin/systemctl start sshd.service
Failed to get D-Bus connection: Operation not permitted
私は物理的なcentosマシンを使用し、同じコマンドがうまく実行されました。
ベストアンサー1
CentOSの現在の公式Dockerイメージにはこの機能が含まれていますが、デフォルトでは無効になっていますsystemd
。この内容は次のように記録されます。CentOSイメージ用のDockerハブページ。
Systemd は centos:7 および centos:latest デフォルトコンテナに含まれますが、デフォルトでは有効ではありません。 systemdを使用するには、次の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"]
これらのファイルを削除すると、systemd
コンテナの起動中に複数のサービスが起動するのを防ぎます。このアプローチを使用すると、シンプルで完全systemd
に機能するコンテナが作成されます。
cgroup
このイメージでコンテナを実行するには、ボリュームをマウントするための特定のオプションも必要です。
$ docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd-app
オプション-v
バインドは、/sys/fs/cgroup
ホストからコンテナへのディレクトリを読み取り専用でマウントします。
また、Ubuntu ホストでコンテナが正常に動作するには、追加のオプションが必要な場合があります。
$ docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd-app
注:Dockerfile自体を含むほとんどの資料は、Daniel Walshの次のブログ投稿から入手したようです。Dockerコンテナでsystemdを実行する。