MacOSXからDockerコンテナへのssh接続ではまったところ

  • 38
    Like
  • 0
    Comment
More than 1 year has passed since last update.

dockerはじめました。@MacOSX
docker1.0以降、インストーラ方式になってからの導入です。

あちこちの情報を見ながら導入してみましたが、ひっかかりがいくつかあったのでリストアップしてみます。

事前に参考にした情報サイトは、

で、この辺を参考にしてみたりしつつも繋がらない。なんでや!

MacOSX => boot2docker_vm間のポートフォワーディングができてない

boot2dockerよくできてて、MacOSX上で普通にdockerコマンド走るのでついつい忘れてしまいそうになりますが、MacOSXの上でboot2docker_vm走ってて、その上でdockerコンテナ走ってるんですよね。
なので、dockerコンテナの22番ポートがホストの49153にフォワードされたと言っても、それをさらにMacOSXにフォワーディング必要。
VirtualBoxのboot2docker_vmの、設定=>ネットワーク=>ポートフォワーディングから、設定できます。

ポートフォワーディング設定

とりあえず、docker側のポートフォワーディングは49153以降で割り振られるようなので、それ以降で必要な数割り振っとけばそれでいいんじゃないかと思います。
明示的にdockerコマンドで指定するなら、それに応じた設定を。

これでMacOSXからも、

$ ssh root@127.0.0.1 -p 49153

でsshログインコンソールが出るようになりました。

rootのパスワードがわからない!

…Dockerfileからイメージ作れば、できたてほやほやのサーバ環境だから当たり前ですよね…。
とりあえずdockerコンテナをbashで起動して、

$ passwd root

でパスワード設定してから、コンテナイメージコミットしましょう。

それでも繋がらない!何度設定してもパスワードがはじかれる!

ちゃんとsshのログインコンソールは出るのですが、何度正しいPWを指定してもはじかれます。
調べてみると、sshdのセキュリティ設定でした。
再びdockerコンテナをbashで起動して、

$ vi /etc/ssh/sshd_config

してやると、デフォルトの設定は

# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes

となってるので、それを

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

に変えてやります。
もちろん変えた後は、コンテナイメージコミット。

これでようやっと、sshで接続できるようになりました。

sshdだけ起ち上がっても…

これ以降は私もこれから勉強なのですが、dcokerは起動時に一つのコマンドしか受け付けないらしいので、sshdだけ起ち上がってもどうするの、という感じですよね。
その辺はsupervisordというのを使えば解決できるらしいので、次は

あたりに進めばいいのかなと。