LoginSignup
12
15

More than 5 years have passed since last update.

docker-machineでguest to hostの通信をする

Posted at

環境

  • MacOSX Yosemite
  • docker 1.9.1
  • docker-machine 0.5.3

概要

dockerで作成したコンテナからMacOSXへポートで通信したかったが、docker-machineが間に立ってるので出来なかった。

結論から言うと、docker-machineからMacOSXへSSH port forwardすることで解決した。

docker network

dockerのネットワークはデフォルトで 172.17.0.0 を使用する。
dockerデーモンを起動しているホスト側に通信したい場合、 172.17.0.1 を指定すれば良い。

docker-machine

docker-machineはデフォルトでvirtualboxをプロバイダにして動作する。
virtualbox上にboot2dockerのVMが起動して、そのVMを介してコンテナとやりとりを行っている。

ハマりどころとしては

  • (MacOSXでは) /Users のみをboot2dockerへマウントする
  • docker-machineからコンテナへのポートフォワーディングは自動で行ってくれるが、docker-machineホストからコンテナへのポートフォワーディングは行ってくれない(逆も)

docker container(guest) to host OS

前述のとおりコンテナからホスト側には 172.17.0.1 を指定すれば通信出来るが、このホスト側は docker-machine のことを指す。
そのため例えば、「コンテナからMacOSXで起動しているMySQLに接続したい」などの時に困ることとなる(今回はコレ)。

解決策

docker-machine上でSSHポートフォワーディングする

以下、docker-machineの名前が default としてコマンド例。

$ docker-machine ssh default
Boot2Docker version 1.9.1, build master : cef800b - Fri Nov 20 19:33:59 UTC 2015
Docker version 1.9.1, build a34a1d5
docker@default:~$ ssh -gfNL 3306:localhost:3306 usename@192.168.60.1 -p22 # ユーザ名はMac側のユーザ名

SSHのポートフォワーディングについては詳しくはここでは説明しません(ぐぐれば出てきます)
コレを実行することで、docker-machineへの3306ポートへの接続をMacOSX側の3306ポートへとforwardingすることが出来ます。
MacOSX側のIPが 192.168.60.1 となっていますが、僕はdocker-machineのネットワークを 192.168.60.1/24 に指定して作成したためコレになっています。

$ docker-machine create --driver virtualbox --virtualbox-hostonly-cidr 192.168.60.1/24 default

わからない場合のネットワークの確認方法はいくつかありますが、docker-machine上で確認するのが一番手軽だと思います。
ip addr とか打ってそれっぽいのがそうです(多分eth1)

解決してないこと

ログインせずに docker-machine ssh default ssh -gfNL 3306:localhost:3306 usename@192.168.60.1 -p22 って実行すると、ttyが繋ぎっぱなしになって帰って来ない
というか、 docker-machine 関係なく(普通のsshでも)帰ってこない……。
向こう側ではちゃんとコマンド実行されてるのになー。なんでだろう。
誰かおしえてください\(^o^)/

おまけ

docker-machineのSSH鍵は ~/.docker/machine/machines/default/ に設置されています(machine名が default の場合)
コンテナからSSHでdocker-machine側にNOPASSWORDしたい場合は、このディレクトリを ~/.ssh としてコンテナ側にマウントしてやればOKでした。

$ docker run -v $HOME/.docker/machine/machines/default:/root/.ssh` hoge /bin/bash
12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15