枯れた技術の水平思考

世の中わからないことだらけだ.少し確かなことは検証をしたことだけ

docker-machine上のコンテナにローカルホスト以外から接続する

最近サービスを作っていて、docker化したが故にdockerが入っていない人に確認してもらうのにハードルが上がったようなそうでないような事を感じる昨今です。

というのもOSXの環境下だとdocker machineという仮想マシンがいるので、通信関係がややこしいんですよね。

やりたいことは以下の感じです。

この説明はOSX 上でVirtualBox上にdocker machineのVMが走っていることが前提となっています。

SS 2016-02-14 14.45.28

※リモートと書いてますけど、語弊が生まれそうなのは承知の上です。

docker machineVMにBridgeを追加する

docker machineを落としてください。

[bash] $ docker-machine stop {machine name} (docker) Stopping VM... [/bash]

VirtualBoxの画面を開いて

※ここでは日本語化しているので、されていない環境においては読みかえてください SS 2016-02-14 15.06.20

[設定]から[ネットワーク]を開き

SS 2016-02-14 15.06.57

上の図のように図のようにアダプター3へブリッジアダプターを追加して名前部分にホストマシンで使っているEthernetを選択します。

それで、いつものようにdocker machineを立ち上げてください。

[bash] $ docker-machine start {machine name} (docker) Starting VM... Started machines may have new IP addresses. You may need to re-run the docker-machine env command. $ eval $(docker-machine env {machine name}) [/bash]

そこから、ブリッジに振られたIPアドレスを調べます。

[bash] $ docker-machine ssh {machine name} ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""_/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ _ o / \ \ / ________/


| | | || \ | | | | _ | ' \ / _ \ / _ | | ) / ` |/ _ \ / | |/ / _ \ '| | |) | () | () | | / __/ (| | () | (| < / | |./ _/ _/ _|_,|_/ _|_|__|_| Boot2Docker version 1.9.0, build master : 16e4a2a - Tue Nov 3 19:49:22 UTC 2015 Docker version 1.9.0, build 76d6bc9 docker@docker:~$ ip addr -- 一部省略 -- 4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 08:00:27:20:2d:64 brd ff:ff:ff:ff:ff:ff inet 192.168.1.12/24 brd 192.168.1.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe20:2d64/64 scope link valid_lft forever preferred_lft forever [/bash]

こいつが今回追加されたブリッジです。 前回の記事でかいたSNSのコンテナを試しに80番で立ち上げて curl で叩くとこんな感じです。

[bash] $ curl --head 192.168.1.12 HTTP/1.1 302 Found Date: Sun, 14 Feb 2016 06:16:12 GMT Server: Apache/2.4.10 (Debian) PHP/7.0.3 X-Powered-By: PHP/7.0.3 Set-Cookie: smoocy_session=6e1ef9b972a52e61afc07e06d80a0cdb92b7b6fe; expires=Sun, 21-Feb-2016 06:16:13 GMT; Max-Age=604800; path=/; domain=.smoocy.xyz; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Location: /service X-XSS-Protection: 1; mode=block X-Frame-Options: DENY X-Content-Type-Options: nosniff Content-Type: text/html; charset=UTF-8

[/bash]

同一ネットワークに接続されている、iPhoneからもこのIPアドレスで接続できました。 これで簡単に検証できます。 IMG_5617

とはいっても

ネットワークの制約が厳しい会社などはきついかもしれないですね。

そしたら、ホストマシンにリバースプロキシたてるしかないっすね。

SS 2016-02-14 15.23.20

というわけで以上です。

 

追記

ブログコメント欄にも頂いておりますが、Twiterにてご指摘をいただいたので、引用させていただきます。