1. ホーム
  2. node.js

ECONNREFUSEDによるPostgres on nodeJS with dockersの実現

2023-11-29 12:33:32

質問

NodeJSでpostgresqlを使ったアプリを作っています。 私はORMとしてSequelizeJSを使用しています。 本当のpostgresデーモンを使用することを避け、私自身のデバイス上でnodejsを持つために、私はdocker-composeでコンテナを使用しています。

を実行すると docker-compose up を実行すると、pgデータベースを起動します。

database system is ready to accept connections

で、nodejsサーバを立ち上げます。 しかし、サーバーはデータベースに接続することができません。

Error: connect ECONNREFUSED 127.0.01:5432

コンテナを使用せずにサーバを実行しようとすると(私のマシン上で本物のnodejsとpostgresdを使用)、それは動作します。

しかし、私はコンテナを使って正しく動作させたいと思っています。私は何が間違っているのか理解していません。

以下は docker-compose.yml ファイルです。

web:
  image: node
  command: npm start
  ports:
    - "8000:4242"
  links:
    - db
  working_dir: /src
  environment:
    SEQ_DB: mydatabase
    SEQ_USER: username
    SEQ_PW: pgpassword
    PORT: 4242
    DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
  volumes:
    - ./:/src
db:
  image: postgres
  ports:
  - "5432:5432"
  environment:
    POSTGRES_USER: username
    POSTGRES_PASSWORD: pgpassword

誰か助けてくれませんか?

(dockerが好きな人 :) )

どのように解決するのですか?

あなたの DATABASE_URL127.0.0.1 であり、これは ループバックアダプタ (さらに はこちら ). これは、quot;connect to myself"という意味です。

両方のアプリケーションを (Docker を使用せずに) 同じホストで実行する場合、両方のアプリケーションは同じアダプタ (以下も同様) でアドレス指定可能です。 localhost ).

コンテナで両方のアプリケーションを実行する場合、以前のように両方のアプリケーションがlocalhost上にあるわけではありません。代わりに web コンテナを db コンテナの IP アドレスを docker0 アダプタの IP アドレス - これは docker-compose が設定します。

変更します。

127.0.0.1 から CONTAINER_NAME (例 db )

DATABASE_URL: postgres://username:[email protected]:5432/mydatabase

から

DATABASE_URL: postgres://username:pgpassword@db:5432/mydatabase

これはDockerのリンクのおかげで動作します。 web コンテナにはファイル ( /etc/hosts ) を持つ db エントリが指す IP は db コンテナがある IP を指すエントリです。これはシステム (この場合、コンテナ) がホスト名を解決しようとするときに最初に見る場所です。