why
前回は Docker コンテナ内部で立ち上げた Postgres サーバーにコンテナ内部から psql コマンドで localhost 宛につなげることができた。
次に、コンテナ外部から DB サーバーに接続したい。
なぜなら、Spring のアプリをコンテナ外で立ち上げたいからだ。
そのためには、DB サーバーはコンテナの外からアクセスできる必要が有る。
https://github.com/version-1/kotlin-web-app-sample/blob/master/src/main/resources/application.yml
調べてみると spring だと application.yml のデータソースに接続先情報を書けば接続してくれるようだ。
なので、まずは Spring 関係なく、 Docker コンテナに立てた DB サーバーの、コンテナ外部からの接続を試みる。
コンテナ外部からのポート指定での接続
nakamasato さんの記事を見ると
psql -h localhost -p {portNumber} -U {userName}
これで Docker Compose で Docker コンテナ側から外部に開放しているポートに当てればいけるようだ。
version: '3'
services:
db:
image: postgres:14
container_name: postgres_dc
ports:
- 5444:5432
volumes:
- db-store:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=pass
volumes:
db-store:
docker-compose.yml で
5432 番 ( postgres が Docker コンテナ内部で使われる番号、変えられない )から 5444 番 ( 外部に開放する接続先ポート ) を設定して
psql -h localhost -p 5444 -U postgres
Password for user postgres:
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1), server 14.6 (Debian 14.6-1.pgdg110+1))
WARNING: psql major version 12, server major version 14.
Some psql features might not work.
Type "help" for help.
postgres=#
コンテナ外部から localhost の 5444 ポートに psql でつなぐと、
environment で指定したパスワードで入ることができた!
まとめ
Docker Compose で Docker コンテナ内部に Postgres の DB サーバーを立てて Docker コンテナ外部からつなぎたい時は
docker-compose.yml に
ports:
- {outSidePortNumber}:5432
と記載して docker-compose up して
psql -h localhost -p {outSidePortNumber} -U {userName}
コンテナ外で、外部用のポート番号に繋げば OK
以上
Top comments (0)