フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【Docker】ローカルPCで同じポート番号をもったコンテナを複数立ち上げる

Docker

Dockerコンテナはポート番号を変更すればいくらでも立てられますが同じポートで立てたいこともありますよね。ここではその方法をお伝えします。

ちなみに大きく分けて4つのやり方があるかなと思います。

  1. macvlanを使う
  2. ipvlanを使う
  3. vagrant/virtualboxなどの仮想マシンを作る
  4. ループバックインターフェースを作る

しかし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