docker compose (docker-compose) で複数のプロジェクトの画面を同時に立ち上げたいとき、調べると「ポートが被ってるからkillしろ」とか「別なところで起動してるdockerをdownさせろ」とか、『同時に立ち上げない前提』の記事ばかり目についたのでそれとは逆の意図で書きました。
現場では2個も3個も同時に開発のプロジェクトが走っていて、いちいちdockerを立ち上げ直すのが面倒だったので。
マシン環境は以下の内容で確認しています。
macOS Catalina バージョン 10.15.7
docker desktop バージョン 3.3.3
結論
プロジェクト同士でポートがかぶらないようにymlファイルを編集してから docker-compose -p other up -d
または docker compose -p other up -d
のコマンドで起動。
やったこと
結論から言えば上記の通り、docker-compose.yml のファイルを編集してポート番号を変更するのですが、例えばプロジェクトAとプロジェクトBを同時に起動したいとき、ymlファイルが以下のようになっているとします。
version: '3'
services:
nginx:
container_name: xxx_nginx
image: xxx:nginx_v4
volumes:
- ./server:/data/www
ports:
- "80:80"
depends_on:
- php
php:
container_name: xxx_php
image: xxx:php_v6
volumes:
- ./server:/data/www
redis:
container_name: xxx_redis
image: xxx:redis_latest
ports:
- "6379:6379"
volumes:
- "./data/redis:/data"
version: '3'
services:
nginx:
container_name: nginx
image: xxx:nginx_latest
volumes:
- ./server:/data/www
ports:
- "80:80"
depends_on:
- php
php:
container_name: php
image: xxx:php_latest
volumes:
- ./server:/data/www
redis:
container_name: redis
image: xxx:redis_latest
ports:
- "6379:6379"
volumes:
- "./data/redis:/data"
プロジェクトAを docker-compose up -d
または docker compose up -d
のコマンドで起動した後、ステータスを見てみると以下のようになります。
% docker compose ps
NAME SERVICE STATUS PORTS
xxx_nginx nginx running 443/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp
xxx_php php running 9000/tcp
xxx_redis redis running 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp
nginx や redis のポートがプロジェクトAとBで重複しているので、プロジェクトBのymlを以下のように変更します。
version: '3'
services:
nginx:
container_name: nginx
image: xxx:nginx_latest
volumes:
- ./server:/data/www
ports:
- "81:80" # ←ここを変更
depends_on:
- php
php:
container_name: php
image: xxx:php_latest
volumes:
- ./server:/data/www
redis:
container_name: redis
image: xxx:redis_latest
ports:
- "6380:6379" # ←ここを変更
volumes:
- "./data/redis:/data"
その後 docker-compose -p other up -d
または docker compose -p other up -d
のコマンドで起動すると、
プロジェクトAは http://localhost/ で、 プロジェクトBは http://localhost:81/ で繋がるようになります。
参考URL
docker-compose の ports 指定まとめ
docker-compose.ymlの書き方について解説してみた
docker-compose を複数起動する