DEV Community

kaede
kaede

Posted on • Updated on

SQL 基礎 Part 02 -- docker-compose で立てたコンテナに外部からつなげる

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 サーバーの、コンテナ外部からの接続を試みる。


コンテナ外部からのポート指定での接続

https://qiita.com/nakamasato/items/4155ec8acbb88af81543#terminal%E3%81%8B%E3%82%89%E6%8E%A5%E7%B6%9A-psql%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88

nakamasato さんの記事を見ると

psql -h localhost -p {portNumber} -U {userName}
Enter fullscreen mode Exit fullscreen mode

これで 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:
Enter fullscreen mode Exit fullscreen mode

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=# 
Enter fullscreen mode Exit fullscreen mode

コンテナ外部から localhost の 5444 ポートに psql でつなぐと、
environment で指定したパスワードで入ることができた!


まとめ

Docker Compose で Docker コンテナ内部に Postgres の DB サーバーを立てて Docker コンテナ外部からつなぎたい時は

docker-compose.yml に

    ports:
      - {outSidePortNumber}:5432
Enter fullscreen mode Exit fullscreen mode

と記載して docker-compose up して

psql -h localhost -p {outSidePortNumber} -U {userName}
Enter fullscreen mode Exit fullscreen mode

コンテナ外で、外部用のポート番号に繋げば OK

以上

Top comments (0)