【发布时间】:2018-08-31 04:22:23
【问题描述】:
我在我的主机 (Mac) 上运行了一个 PostgreSQL 服务,我想从我的 Node 应用程序的 Docker 容器中连接到它。我知道有docker.for.mac.localhost,但第一步我想使用简单的方法,即将我的主机IP地址直接传递到容器中。但是,这并没有奏效,我不太确定自己做错了什么。我正在使用 Node pg 包连接到我的数据库。任何帮助都会很棒,谢谢!
docker-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);
}
};
【问题讨论】:
-
如果你已经在使用 docker 甚至 docker-compose,也可以将 postgresql 放入 docker 容器中。官方镜像好用,docker网络轻松连接你的容器
-
连接失败的输出是什么?
-
@OkieOth 我发布了我从 Chrome 控制台收到的错误 - 我也会对此进行调查,但我也很好奇为什么这不起作用
标签: node.js postgresql docker