我'm trying to dockerize a NodeJS / PostgreSQL app, but i can' t运行 knex
迁移,我收到以下错误:
错误:在TCPConnectWrap.afterConnect连接ECONNREFUSED 172.18.0.2:15432 [as oncomplete](net.js:1161:14)
这是我的docker-compose.yml:
version: "3"
services:
app:
build: .
depends_on:
- db
links:
- db
ports:
- "3000:3000"
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: users-microservice
DB_HOST: db
db:
image: postgres:10.4-alpine
expose:
- "5432"
ports:
- "15432:5432"
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: users-microservice
'app'服务的Dockerfile:
FROM node:10.1-alpine
EXPOSE 3000 9229 15432
COPY . /home/app
WORKDIR /home/app
RUN npm install
RUN npm install -g knex
CMD ./scripts/start.sh
在start.sh中,以下命令有效:
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$DB_HOST" -U "$POSTGRES_USER" -c '\d'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
所以我可以通过CLI连接到postgres,但knex不能,为什么呢?我搞错了,我是Docker的新手?
最好的祝福,
1 回答
我假设您正在尝试在服务
app
中运行命令,当您看到此错误消息时(但也许您可以指定)?我的猜测是你正试图从
app
内连接db:15432
. 注意,那个说只确保您可以通过端口
15432
从主机调用该服务 . 但是如果你想从app
中调用服务db
,你仍然需要使用db:5432
.