概要
遊びで作ってる物をデプロイするにあたり、あまり運用にコストを掛けたくないのでVPSを借りて一台に全部ぶちこむ構成で作っていたのですが、単純なことに見事にハマりちらかして結構な時間が解けてしまったので備忘録です。
結論
私の環境ではufwを有効にしていたので、コンテナからのアクセスがufwに弾かれていて、ローカルのPostgreSQLへの接続ができていませんでした。ufwの許可ルールにdockerがデフォルトで使うアドレス範囲(172.16.0.0/12)からの接続を追加することで解決しました。
(もうすこし設定を絞ったほうが良いと思いますが、お遊びなのでヨシ!)
# ufw allow proto tcp from 172.16.0.0/12 to any port 5432
背景
こんな雰囲気のdocker-composeで、DBを参照するアプリが起動するようにアプリケーションを作成しました。
docker-compose.yml
version: '3'
services:
app:
build:
context: .
dockerfile: ./Dockerfile
environment:
- DATABASE_CLIENT=postgres
- DATABASE_HOST=host.docker.internal
- DATABASE_PORT=5432
- DATABASE_USERNAME=dbuser
- DATABASE_PASSWORD=dbpass
- DATABASE_NAME=dbname
- DATABASE_SCHEMA=public
extra_hosts:
- host.docker.internal:host-gateway
command: sh -c 'yarn run start'
restart: always
PostgreSQLの設定をコンテナからアクセスできるように変更、追加して、サービスを再起動しています。
/etc/postgresql/15/main/postgresql.conf
# ...略
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
# 略...
/etc/postgresql/15/main/pg_hba.conf
# ...略
# IPv4 Docker container connections:
host all all 172.16.0.0/12 scram-sha-256
その後、意気揚々とdocker compose up
するもDB接続エラーが出て、設定見直したりいろいろ試行錯誤するも解決せず。
最終的には、syslogを確認してufwが原因だったと気づくまで1.5日溶けました...
この記事がだれかの時間を救いますように...