Dockerコンテナはポート番号を変更すればいくらでも立てられますが同じポートで立てたいこともありますよね。ここではその方法をお伝えします。
ちなみに大きく分けて4つのやり方があるかなと思います。
- macvlanを使う
- ipvlanを使う
- vagrant/virtualboxなどの仮想マシンを作る
- ループバックインターフェースを作る
しかしM1 Mac環境では1と2がmobyのバグで使えないですし、Vagrantも対応していません。
ということでここでは4を紹介します。
まずはこれを叩いてI/Fを作ります。
sudo ifconfig lo0 alias 127.0.0.2 sudo ifconfig lo0 alias 127.0.0.3 sudo ifconfig lo0 alias 127.0.0.4
ポートはアドレス単位に固有なので別のアドレスを作れば同じポート番号でも大丈夫なわけですね。ちなみにこれらはループバックと呼ばれるI/Fなので、最終的にアクセスするのは自分自身ということになります。
そしてこのようにdocker-composeファイルを記載することで同じポートで複数起動させることができます!
version: "3.8" services: redis1: container_name: redis1 image: redis:5.0.9 ports: - '127.0.0.2:6379:6379' redis2: container_name: redis2 image: redis:5.0.9 ports: - '127.0.0.3:6379:6379' redis3: container_name: redis3 image: redis:5.0.9 ports: - '127.0.0.4:6379:6379'
❯ netstat -ant | grep 6379 tcp4 0 0 127.0.0.2.6379 *.* LISTEN tcp4 0 0 127.0.0.3.6379 *.* LISTEN tcp4 0 0 127.0.0.4.6379 *.* LISTEN