Dockerのポートを考える手間を削減したい!
背景
今所属している会社では複数の案件が並行することがよくあるので、その度に「このポート番号使ってなかったからこのポートを使おう」みたいなことを起こり、プロジェクトで「このポート何番で立ち上げてたっけ?」とよくなるのでIPアドレスから変えようと思いました。
概要
- ポートではなくIPアドレスを変更する
127.*.*.*
は ローカルループバックアドレスでホスト自身を指す/etc/hosts
にIPと名前の紐付けを行う- mac osの場合は、基本的に
127.0.0.1
のみがループバックアドレスとなるため、127.0.0.2
を使用したい場合はlo0
に関連づける必要がある
docker-compose.yml
version: "3" services: web: image: "httpd:2.4" ports: - "${IP}:80:80" volumes: - "./public/:/usr/local/apache2/htdocs/"
.env
IP=127.0.0.2
/etc/hostsの説明
127.0.0.1 localhost // デフォルトで127.0.0.1とlocalhostが紐づいている 255.255.255.255 broadcasthost // ??? ::1 localhost // IPv6でのループバックアドレス(この一つのみ) 127.0.0.2 example.com
結果
Name Command State Ports ----------------------------------------------------------------------------------------------------------- server_app_1 /scripts/run.sh Up 80/tcp, 9000/tcp server_db_1 docker-entrypoint.sh mysqld Up 127.0.0.2:3306->3306/tcp, 33060/tcp server_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 127.0.0.2:1234->80/tcp server_web_1 nginx -g daemon off; Up 127.0.0.2:80->80/tcp
発生した問題
🐛 ターミナルを開くと毎度パスワードを求められるようになった
/etc/sudoers
にifconfigコマンドだけパスワードを求めないように設定して解決- ターミナルの起動が遅くなる
🐛 IPアドレスが異なるのにポートがかぶるとコンテナが立ち上がらなくなった
docker-compose.yml
にホストを指定せずにポートのみ指定すると、0.0.0.0
とバインドされる127.0.0.1
と0.0.0.0
は意味が異なる
🐛 Macで名前解決をすると遅くなる
まとめ
複数人で行う際に、みんなMacだと127.0.0.1以外のIPアドレスを使用できる設定をしたり、sudoersを編集したりと色々大変なので、これからも使い続けるか検討中
参考
まだdocker-composeのホスト側portを考えるのに疲弊しているの? 〜IP指定してwell-known ports使い放題、同時に1677万案件回す〜 - 勉強日記