Docker, 仮想環境

docker-compose.ymlの本番環境用にポート設定を上書きしようとした

結論

ポートフォワーディング設定については本番環境用ymlを用意しても上書きではなく追加になってしまうから、開発/本番で環境変数を変えるなどしてポート設定をした方が良さそうだ。

それかdocker-compose.ymlでポートを開発環境と本番環境で切り替えるにあるような方法でやると良い(記事を書いてからこのサイトに気づいた)

試したこと

docker-composeを使うときに開発環境と本番環境で設定を変える方法として、上書きというのがあったのでやってみた。
Compose をプロダクションで使う

  • 開発用:docker-compose.yml
  • 本番用(変更点のみ):production.yml

としておき、

$ docker-compose -f docker-compose.yml -f production.yml up

とすれば、production.ymlで上書きして実行してくれるらしい。試しに以下のような設定でやってみた。

docker-compose.yml

version: '3'

services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    volumes:
      - .:/code
      - ./logs:/var/log/app
    ports:
      - "8081:80"
    depends_on:
      - db

production.yml

version: '3'

services:
  db:
    restart: always
  web:
    restart: always
    ports:
      - "80:80"

期待として本番環境では

  • 自動起動が設定される
  • ポートが8081ではなく80番になる

というもの。これで-f docker-compose.yml -f production.ymlというオプションで実行してみると、確かに自動起動設定が反映された。

しかしポートについては、上書きではなく8081番と80番の両方のポートでアクセスできるようになってしまった。portsについては上書きではなく「追加」とみなされるらしい。つまり、

ports:
  - "8081:80"
  - "80:80"

となるようだ。ポート設定についてはこの方法ではなく、環境変数を使うようにしておいて、開発環境と本番環境で値を変えるという方法の方が良さそうだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です