奇妙な問題があります。
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
何が問題なのでしょうか?
以下を使用してコンテナに入るときnsenter
ssh
サービスを開始すると、SSHを使用できます。しかし、コンテナが作成されたときに起動しないようですssh-server
。
どうすればいいですか?
答え1
コンテナと画像
このRUN
ステートメントは、Dockerイメージをビルドするときにコマンドを実行するために使用されます。とを
使用すると、そのイメージを使用して、コンテナの起動時に実行するアイテムを定義できます。バラよりENTRYPOINT
CMD
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 sshtest
default arg
docker run sshtest sh -c 'while true; do echo "passed arg" && sleep 3; done'
1秒ごとに印刷3秒ごとに印刷するかどうかpassed arg