从Docker容器中的Node应用程序访问主机上的PostgreSQL服务

时间:2018-03-21 21:16:41

标签: node.js postgresql docker

我在我的主机(Mac)上运行了PostgreSQL服务,我想从我的Node应用程序中的Docker容器中连接它。我知道有docker.for.mac.localhost,但第一步我想使用简单的方法,即将我的主机IP地址直接传递到容器中。然而,这没有奏效,我不太确定我做错了什么。我正在使用Node pg包连接到我的数据库。任何帮助都会很棒,谢谢!

搬运工-compose.yml

version: '2'
services:
  web:
    env_file:
      - .env
    build: .
    command: npm run watch
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - "8080:8080"
    environment:
      - NODE_ENV=${NODE_ENV}
      - DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASS}@${LOCAL_IP}:5432/${POSTGRES_DB}
      - PGHOSTADDR=${LOCAL_IP}
      - PGPORT=5432
      - PGDATABASE=${POSTGRES_DB}
      - PGUSER=${POSTGRES_USER}
      - PGPASSWORD=${POSTGRES_PASS}

Dockerfile

# pull node 9.4 as base
FROM node:9.4.0

# set working directory
WORKDIR /usr/src/app

# copy packages.json in
COPY package.json /usr/src/app
COPY package-lock.json /usr/src/app

RUN rm -rf node_modules

# run files
RUN npm install

# copy everything else in
COPY . /usr/src/app

# expoxe port
EXPOSE 8080

# starting task
CMD npm run watch

connection.js

const { Pool } = require("pg");

const pool = new Pool({
  user: process.env.PGUSER,
  host: process.env.PGHOSTADDR,
  database: process.env.PGDATABASE,
  password: process.env.PGPASSWORD,
  port: process.env.PGPORT
});

export = {
  query: (text: String, params: Object, callback: Function) => {
    console.log(pool);
    return pool.query(text, params, callback);
  }
};

这是错误 enter image description here

1 个答案:

答案 0 :(得分:0)

我认为他们不在同一个网络上。从容器中,本地IP是容器本身,而不是主机。 您应该尝试在docker compose上添加数据库,或者添加网络部分。