boot2docker上のコンテナにIP指定でログインする
他の作業をやっていたときにふと思い立ちうまく行ったのでメモしておきます。
MacOSX -> boot2docker -> docker containerという構成で作業しているわけですが、今まではDocker起動時にポートをフォワーディングして起動させ、Macからアクセスする際にはIPとポートを指定してログインしていました。
$ docker run -d -p 40022:22 --name test krossblack777/dockerhub-test $ cat ~/.ssh/config Host ci HostName 192.168.59.103 User docker Port 40022 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile ~/.ssh/id_rsa.docker IdentitiesOnly yes LogLevel FATAL $ ssh ci Last login: Tue Feb 24 14:36:00 2015 from 192.168.59.3 # 192.168.59.3経由でアクセス [docker@7563e5769c9b ~]$
要はMacから直接コンテナのIP指定ができなかったので、boot2docker上のポートに対しアクセスして、ポートフォワーディングさせてコンテナにアクセスしていたわけです。正直不便だなと思っていたわけですが、多段SSHの設定をすることで回避できるみたいです。
$ cat ~/.ssh/config Host boot2docker User docker HostName 192.168.59.103 IdentityFile ~/.ssh/id_boot2docker Host 172.17.0.* User docker UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile ~/.ssh/id_rsa.docker IdentitiesOnly yes LogLevel FATAL ProxyCommand ssh -CW %h:%p boot2docker
boot2dockerというのが踏み台サーバですね。次の172から始まるIPはDockerのコンテナです。複数書くのが面倒なので*にしています。この中でもProxyCommandがミソです。実際にアクセスしてみると
$ ssh 172.17.0.8 Last login: Tue Feb 24 14:14:47 2015 from 172.17.42.1 # 172.17.42.1経由でアクセス [docker@0861c771aebf ~]$
という形でさっきとは別経路からアクセスできていますね。これでMacからコンテナに対しAnsible実行ができるようになりました。
2015/02/27追記
ルーティングテーブルをいじればssh以外もIP指定できるようになるみたいです。
docker の VM に向けてルーティング追加すればポートフォワード要らないってのにようやく気がついたメモ - Qiita