LoginSignup
13
12

More than 5 years have passed since last update.

VagrantをGWにしてホストから直接Dockerる

Last updated at Posted at 2014-07-06

鳥頭なのでポート番号を覚えられません

少し語弊があると思いますが、ポート番号自体を覚えられないのではなく、その場で決めた特殊なポート番号が覚えられません。
今どきは1024以下に関わらずなんからの定番ポート番号があります。1521,3000,5432,8080などなど。
これらは事実上のwell-knownポートであり、このサービスはこの番号というのが体に染みついています。特に8080とかはブラウザデバッグするときアドレスとセットで勝手に体が入力してしまう程度に末端神経が毒されています。
何が言いたいのかというと、あるサービスに対してポートフォワードしたとき、そのポート番号をブラウザなりに打ち込んだりするときに少し間が開いてしまいなんか気持ち悪いというだけの話です。

動作を想定している環境

VagrantとDockerを使って環境に依存せずにChefのお勉強がしたい」で書いたのですが、ぼくは仕事の都合上windowsをキープしないといけません。しかし家での開発はmacでやっています。なので、開発環境をそろえるために仮想環境を用意しているのですが、仮想環境の構築も両環境で統一したいのです。
なので、host -> box(vagrant) -> dockerという3段重ねで環境を作っています。
で、開発中のサービスはdocker上にあります。vagrantはお利巧なので、ポートフォワードなんておしゃれな事をやってくれますが、残念ながら冒頭で書いた通り僕の指がそのお利巧さについていけていません。

だからvagrantをルーターにした

解決策は簡単です。vagrantをルーターにしちゃえばいいだけです。
vagrantで仮想マシンのプロビジョニング時にeth0とdocker0間でパケットをガバガバに転送するようにします。

provision.sh
# ホストから直接dockerコンテナにアクセスできるようにする
sed -ir 's/net\.ipv4\.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain

iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface docker0 -j ACCEPT

iptables --table nat --append POSTROUTING --out-interface docker0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT

service iptables save
service iptables start

んでもってwindowsやmacのルーティング設定を変更します。
route -p add 172.17.0.0 mask 255.255.255.0 192.168.10.10
こうするとこんな感じのネットワークになります。

無題.png

ホストから172.17.0.0へのパケットはvagrantがGWになり、vagrantが責任を以てdockerに届けてくれます。

テスト

まずvagrant上でコンテナを起動させます。
無題.png

現在のコンテナIDは945d898e8eadのようなので、これのIPを調べます。
docker inspect 945 | jq ".[0].NetworkSettings.IPAddress"

無題.png

今のIPは172.17.0.2だそうです。sshしてみます。クライアントはホスト上のcygwin-sshです。

無題.png

直接無事sshできました。ポート番号も22のままなので-pオプションも不要です。

13
12
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
13
12