簡體   English   中英

使用 Docker Compose 將單獨的 Postgres 和 Node 容器連接在一起

[英]Using Docker Compose to connect separate Postgres and Node containers together

我正在嘗試使用 Docker Compose 將 Node.js 容器連接到 Postgres 容器。 我可以很好地運行 Node 服務器,也可以從本地連接到 Postgres 容器,因為我已經映射了端口,但是我無法讓 Node 容器連接到數據庫。

這是編寫 YAML 文件:

version: "3"
services:
  api_dev:
    build: ./api
    command: sh -c "sleep 5; npm run dev" # I added the sleep in to wait for the DB to load but it doesn't work either way with or without this sleep part
    container_name: pc-api-dev
    depends_on:
      - dba
    links:
      - dba
    ports:
      - 8001:3001
    volumes:
      - ./api:/home/app/api
      - /home/app/api/node_modules
    working_dir: /home/app/api
    restart: on-failure
  dba:
    container_name: dba
    image: postgres
    expose: 
      - 5432
    ports:
      - '5431:5432'
    env_file:
      - ./api/db.env

在我的 Node 容器中,我正在等待 Node 服務器啟動並嘗試連接到另一個容器中的數據庫,如下所示:

const { Client } = require('pg')

const server = app.listen(app.get('port'), async () => {
    console.log('App running...');

    const client = new Client({
        user: 'db-user',
        host: 'dba', // host is set to the service name of the DB in the compose file
        database: 'db-name',
        password: 'db-pass',
        port: 5431,
    })

    try {
        await client.connect()
        console.log(client) // x - can't see this
        client.query('SELECT NOW()', (err, res) => {
            console.log(err, res) // x - can't see this
            client.end()
        })
        console.log('test') // x - can't see this
    } catch (e) {
        console.log(e) // x - also can't see this
    }

});

今天仔細看了下,發現上面的連接代碼中的DB主機不能是localhost,因為它是指當前運行的容器,所以必須設置為我們容器的服務名'正在連接到(在這種情況下為 dba)。 我還映射了端口,並且可以在我的節點服務器啟動之前看到數據庫已准備好接受連接。

但是,我不僅無法從 Node 連接到數據庫,而且也無法從 try catch 中看到任何成功或錯誤控制台日志。 就好像連接沒有解決,並且永遠不會超時,但我不確定。

我還看到需要更新“listen_addresses”,以便其他容器可以連接到 Postgres 容器,但是當我由於缺少日志而無法調試實際問題時,很難找出如何執行此操作並進行測試。

任何方向將不勝感激,謝謝。

您正在設置容器名稱,並且可以通過它引用該容器。 例如,

db:
container_name: container_db

主機:端口

DB_URL: container_db:5432

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM