#21.【Docker・DB連携】コンテナ上のDBには行が登録できているのに、SQL開発ツール上では反映されていない場合の対処方法

IT技術
この記事は約3分で読めます。

結論

SQL開発ツールで接続しているDBがコンテナ上のDBではなくローカル上のDBになっている可能性がある。

正しい)sql開発ツール→コンテナのDBに接続

誤り )sql開発ツール→ローカルのDBに接続

問題のあるコード

▼docker-compose.yml

db:
image: postgres:16
restart: always
environment:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: testdb
ports:
- "5432:5432" # 追加: PostgreSQLのポートをホストにフォワード
volumes:
- postgres_data:/var/lib/postgresql/data

上記のように設定している場合、ホストのポート5432をコンテナの5432にフォワードするということは、ホスト(ローカルPC)のポート5432に送られたすべてのネットワークトラフィックが、自動的にDockerコンテナ内のポート5432に送られるように設定することを意味します。

しかし、この時すでにローカルのポート5432をローカルPCのpostgresql等を使用していると、
5432に複数のプロセスが競合することとなり今回のようにコンテナのデータベースに接続できないといったことが発生します。従って、下記のように設定を修正しましょう。

修正後のコード

▼docker-compose.yml

db:
image: postgres:16
restart: always
environment:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: testdb
ports:
- "5434:5432" # 追加: PostgreSQLのポートをホストにフォワード
volumes:
- postgres_data:/var/lib/postgresql/data

これによりプロセスの競合を避けつつ、あなたのPC(ホスト)のポート5434に届くデータが、自動的にコンテナのポスト5432に転送されるようになります。
同様のエラーが発生した場合は、他の利用されていないポート番号に変更して試してみてください。

修正が完了したら利用しているsqlツール(A5sql等)で再度データベースの接続設定を行い、テーブルの値を確認してみてください。

問題なくコンテナのテーブルと同期できているはずです。

参考

データベースの接続設定については下記サイトを参考にしてください。
▼【Docker】DockerコンテナのDBに外部のA5:SQL Mk-2から接続する方法
https://programming.sincoston.com/docker-db-connect-pg-external/