我在我的主机(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);
}
};
答案 0 :(得分:0)
我认为他们不在同一个网络上。从容器中,本地IP是容器本身,而不是主机。 您应该尝试在docker compose上添加数据库,或者添加网络部分。