Docker上に複数の PostgreSQL コンテナを立ち上げる

Strapi を開発環境と本番環境のDockerで動かしたい【まとめ版】の記事を書いていた時に、以前別で作った環境とポート番号が重複してしまい、とても苦しみました。

Strapi コンテナを起動しようとしてもError: connect ECONNREFUSED 172.25.0.2:5438といったエラーがずっとでてしまって PostgreSQL のコンテナと接続できずにいました。

解決法

Creating multiple PostgreSQL containers in docker in fedora – Stackoverflowのアンサーより、PGPORTという変数を用いることでポート番号を変更することができました。

これは、PostgreSQL Docker イメージのOverviewにも書かれておらずかなり苦戦しました。

PGPORTを環境変数として設定することでポートの変更を行い、複数のDockerコンテナを立ち上げることができます。

# ポートの指定 -p 5111:5434 環境変数を追加 -e PGPORT=5111
docker container run --name postgres-container -dit -p 5111:5432 -e POSTGRES_DB=hoge -e POSTGRES_USER=hoge -e POSTGRES_PASSWORD=hoge -e PGPORT=5111 postgres

Docker Compose を利用する場合には以下のように追加します。

docker-compose.yml
version: "3"
services:
.. 省略
  vps-docker-strapi-database:
    image: postgres:12.0-alpine
    container_name: vps-docker-strapi-database
    platform: linux/amd64
    restart: unless-stopped
    env_file: .env.development
    environment:
      POSTGRES_USER: ${DATABASE_USERNAME}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
      POSTGRES_DB: ${DATABASE_NAME} 
      PGPORT: ${DATABASE_PORT} # 追加する
    volumes:
      - ./data:/var/lib/postgresql/data/
    ports:
      - "${DATABASE_PORT}:5432"
    networks:
      - vps-docker-strapi-networks

.. 省略

おわりに

当箇所にハマった記事(Strapi を開発環境と本番環境のDockerで動かしたい【まとめ版】)にも追記しておきます。

丸一日くらい溶かしたので解決してよかったです。