dockerはじめました。@MacOSX
docker1.0以降、インストーラ方式になってからの導入です。
あちこちの情報を見ながら導入してみましたが、ひっかかりがいくつかあったのでリストアップしてみます。
事前に参考にした情報サイトは、
- Dockerで立てたコンテナにsshで接続する $shibayu36->blog;
- Dockerizing an SSH Daemon Service
- docker のコンテナイメージに ssh でアクセスしてみる ようへいの日々精進 XP
で、この辺を参考にしてみたりしつつも繋がらない。なんでや!
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だけ起ち上がっても…
これ以降は私もこれから勉強なのですが、dockerは起動時に一つのコマンドしか受け付けないらしいので、sshdだけ起ち上がってもどうするの、という感じですよね。
その辺はsupervisordというのを使えば解決できるらしいので、次は
あたりに進めばいいのかなと。