openssh-serverがDockerコンテナで起動されませんでした。

openssh-serverがDockerコンテナで起動されませんでした。

奇妙な問題があります。

IPアドレスを持つDockerコンテナにSSHで接続できません172.17.0.61

次のエラーが発生します。

$ ssh 172.17.0.61
ssh: connect to host 172.17.0.61 port 22: Connection refused

鉱山には設置段階がDockerfile含まれます。openssh-server

RUN apt-get -y install curl runit openssh-server

SSHを起動するステップもあります。

RUN service ssh start

何が問題なのでしょうか?

以下を使用してコンテナに入るときnsentersshサービスを開始すると、SSHを使用できます。しかし、コンテナが作成されたときに起動しないようですssh-server

どうすればいいですか?

答え1

コンテナと画像

このRUNステートメントは、Dockerイメージをビルドするときにコマンドを実行するために使用されます。とを
使用すると、そのイメージを使用して、コンテナの起動時に実行するアイテムを定義できます。バラよりENTRYPOINTCMD
Dockerfileリファレンス使用方法のガイドラインを入手してください。

提供する

init-system はコンテナにプリインストールされていないため、service ... startコンテナでは使用できません。
ステートメントでプロセスをCMDフォアグラウンドプロセスとして起動するか、PhusionやSupervisordなどの初期化システムを使用することを検討してください。

答え2

より良い方法があると思います。

ドッカーファイル

FROM ubuntu:14.04.1
EXPOSE 22
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
RUN apt-get install -y openssh-server

ENTRYPOINT ["sh", "/docker-entrypoint.sh"]

# THIS PART WILL BE REPLACED IF YOU PASS SOME OTHER COMMAND TO docker RUN
CMD while true; do echo "default arg" && sleep 1; done

ドッカー-entrypoint.sh

#!/bin/bash
service ssh restart
exec "$@"

ビルドコマンド docker build -t sshtest .

このアプローチの利点は、SSHデーモンを使用すると常に開始されることですdocker run。ただし、次のオプションのパラメーターを指定することもできます。

docker run sshtestdefault argdocker run sshtest sh -c 'while true; do echo "passed arg" && sleep 3; done'1秒ごとに印刷3秒ごとに印刷するかどうかpassed arg

関連情報