DB用のコンテナをlocalhostに展開してWebアプリの開発をより効率化しようとしたときに、WebアプリからDBに上手く繋げなくて、沼にハマったのでその解消法を書きたいと思います。
解決策はいくつか方法があるみたいですね。
それぞれの開発環境にあった方法で対策されるのが良いかと思います。なお、EC2環境をお使いの方は、固定IPをアタッチできるので、私の環境では特に問題になりませんでした。
問題点
分かるとどうってことはないんですが、次の問題にひたすらはまっていました。
- Dockerコンテナ内からlocalhostを指定すると、Webアプリ用のコンテナのlocalhostを指してしまう。
- 開発用に仕事で使っているWindowsマシンはDHCPの為、起動の度にIPが変わってしまう。
- Dockerコンテナは、起動[dokcer-compse up -d]の度にIPが変わってしまう
解決策その1
「host.docker.internal」または「gateway.docker.internal」と指定する
解決策その2
毎回DBコンテナの「/etc/hosts」の内容をみてIPアドレスを確認してDB接続ファイルを書き直す。
root@a051652e3fe1:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 a051652e3fe1 ←これがコンテナのIPなので[172.17.0.2:3306]でアクセス
解決策その3
ホストマシンのIPアドレスをみてDB接続ファイルを編集する
C:\github\docker1>ipconfig
Windows IP 構成
Wireless LAN adapter ローカル エリア接続* 1:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.23.30 ←これをみて、[192.168.23.30:8306]でアクセス
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:192.168.23.1
まとめ
他にもいくつか解決策はあるようですが、私は「host.docker.internal」が良いかなと思います。ただそれぞれの環境でルールがあったり、前提が異なるので、皆さんの開発環境に合わせた良い方法を選択してください。
自分のPCに開発環境簡単に作れるようになると開発の幅が広がってよいですよね。
コメント