0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nestjs dockerで立ち上げたpostgresにアクセスできなかった

Posted at

以下は、NestJSアプリケーションとDockerコンテナ内のPostgreSQLデータベースが接続できなかった問題について解決策をまとめた記事です。


タイトル: NestJS Dockerで立ち上げたPostgreSQLにアクセスできなかった

問題の背景

NestJSで開発したアプリケーションが、ローカルのPostgreSQLデータベースに接続できない問題が発生しました。Docker上に立ち上げたPostgreSQLコンテナと通信できなかったことが原因です。この問題を解決するために、環境設定の見直しと正しい接続設定を行いました。

原因

問題の主な原因は以下の点です:

  • データベース名、ユーザー名、パスワードの不一致:設定ファイルと実際にDockerコンテナで設定した値が一致していませんでした。
  • ポート番号の不一致:Dockerコンテナのポートと、NestJSアプリケーションが使用するポートが異なっていました。

解決策

  1. .envファイルの確認:まず、NestJSアプリケーションで使用するデータベースの接続情報を正しく.envファイルで設定しました。

  2. Docker Composeファイルの設定:Docker Composeで立ち上げたPostgreSQLコンテナの環境変数を確認し、データベース名、ユーザー名、パスワードを正しく設定しました。また、コンテナのポートとローカルのポートを一致させました。

以下が最終的に問題なく動作する設定です。

1. NestJSアプリケーションの設定

まず、NestJSで使用するtypeormConfigを以下のように設定しました:

import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { config } from 'dotenv';
import { join } from 'path';
import { TaskEntity } from 'src/task';

config({ path: '.env' });

export const typeormConfig: TypeOrmModuleOptions = {
  type: 'postgres',
  host: 'localhost',
  port: 5432,
  database: 'demo',
  username: 'root',
  password: 'root',
  schema: 'public',
  entities: [TaskEntity],
  synchronize: true,
  logging: true,
};
  • hostlocalhostに設定。Dockerコンテナ内のPostgreSQLに接続するためには、ホストをlocalhostとする必要があります。
  • port:コンテナの5432ポートを使用(5432:5432でマッピングしているため)。
  • databaseusernamepassword:これらの設定は、Docker Composeファイルで設定したものと一致させる必要があります。

2. Docker Composeファイルの設定

次に、docker-compose.ymlを以下のように設定しました:

version: '3.9'

services:
  db:
    image: postgres:15
    container_name: postgres-db
    ports:
      - '5432:5432'
    environment:
      POSTGRES_PASSWORD: root
      POSTGRES_USER: root
      POSTGRES_DB: demo
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
  • POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB:これらは、NestJSアプリケーションで設定した接続情報(rootrootdemo)と一致させる必要があります。
  • ポートの設定5432:5432とすることで、ホストの5432ポートをコンテナにマッピングし、ローカルのPostgreSQLインスタンスとして接続できるようにしました。

3. 実行

これらの設定を反映させた後、以下の手順でDockerコンテナを再起動しました。

  1. Docker Composeでコンテナをビルド・立ち上げます。
    docker-compose up --build
    
  2. NestJSアプリケーションを起動します。
    npm run start
    

結果

これで、NestJSアプリケーションがDockerコンテナ内のPostgreSQLデータベースに正しく接続できるようになり、エラーなく動作しました。

まとめ

NestJSアプリケーションがDocker上のPostgreSQLに接続できなかった原因は、データベース設定の不一致とポート番号の不一致にありました。設定を見直すことで、無事接続できるようになりました。このように、Docker環境でアプリケーションを動かす際は、コンテナとアプリケーションの設定が一致しているかを再確認することが重要です。


これで、NestJSとDockerを使ったPostgreSQLの接続問題が解決できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?