猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

Mac上に立てたDockerに固定IPを降って、IPでアクセスしようと思ったらできなかった

f:id:yoshiki_utakata:20191224195335p:plain

やりたいこと

Docker でローカル開発環境を作りたい時があります。

アプリには、APIサーバーとWebサーバーがあり、 docker-compose up -d で立ち上げたいです。

docker-compose up -d すると、

  • 192.168.33.10 -- Web サーバーが立ち上がる
  • 192.168.33.20 -- API サーバーが立ち上がる

そして、 http://192.168.33.10 で Web にアクセス、 http://192.168.33.20 で API にアクセスできるようにしたい。

結論

できなかった。

Docker 公式ドキュメントを見ると

https://docs.docker.jp/docker-for-mac/networking.html

コンテナに ping できません

Docker Desktop for Mac は Linux コンテナに対してトラフィックを経路付け(ルーティング)できません。

ホストのMac から Docker にルーティングすることはできず、

コンテナごとに IP アドレスを割り当てられません

docker (Linux) ブリッジ・ネットワークは macOS ホストから到達できません。

ここにも同じことが書いてある。

代替手段

結局 port の設定で、Docker のポートと、ホストのMacのポートを紐付けて、localhost なり、 127.0.0.1 でアクセスするしかないようです。

この場合、当然ホストの Mac 側は同じポートを使えないので、Web で 80 を使っていたら、 API は 8080 のようにするしかなさそうです。。。

Docker コンテナ同士は普通に接続できるので、例えば、localhost:80 で Web にアクセスし、 Web のバックエンド側で、 api:80 に接続する、のようなことはできます。(このやり方の場合バックエンドから接続しないと接続できないので注意)