80番ポートで複数台接続したく
複数IPもらってサーバ構築して苦労したので残しておきます。
社内の開発サーバで複数人でdockerを使う場合にお役に立てば
#目指したもの(全て同一サーバ)
Ubutnu16.04にて
192.168.1.1:80(hostのeth 0)
→ docker 0[172.18.0.2 :80]へ接続される
192.168.1.2:80(hostのeth 0.1)
→ docker 1[172.19.0.2 :80]へ接続される
--net=hostで簡単にできると思ってました
#なぜリバースプロキシを選ばなかったのか
jwilder/nginx-proxyを使えば簡単に実装できるが
ホスト名を各クライアントPCで登録するとか
野良DNSを構築したくなかった
#isuueと日本語マニュアルにありました
ブリッジ・ドライバのオプション
オプション | 同等 | 説明 |
---|---|---|
com.docker.network.bridge.host_binding_ipv4 | --ip | コンテナのポートをバインドする時の、デフォルト IP アドレスを指定 |
docker-composeは2つファイルを用意しないといけないのかな。
networksを2つ同じファイルに書いて制御できる?
実行コマンド
docker network create\
--driver=bridge\
--subnet=172.18.0.0/16\
--gateway=172.18.0.1\
-o "com.docker.network.bridge.host_binding_ipv4"="192.168.1.1"
-o "com.docker.network.bridge.name="docker1"\
docker1
docker network create\
--driver=bridge\
--subnet=172.19.0.0/16\
-o "com.docker.network.bridge.host_binding_ipv4"="192.168.1.2"
-o "com.docker.network.bridge.name="docker2"\
docker2
compose-file1
services:
web1:
ports:
- "80:80"
networks:
default:
external:
name: docker1
compose-file2
services:
web2:
ports:
- "80:80"
networks:
default:
external:
name: docker2
#試したこと(結論は上です)
ports:
- "172.17.0.1:80:80"だけでは動作しない
dockerで同じNWをブリッジで作成し、NICにbrctlで紐付け→外部と繋がらない
dockerで同じNWをブリッジを作成し、NICに紐付けたbr0にbrctlで紐付け→brctlでエラー
docker network createで全部にgatewayを指定していたらエラーでできず