Centos DockerイメージからSSHサービスを開始できません

Centos DockerイメージからSSHサービスを開始できません

centos 7Docker 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を実行する

おすすめ記事