首页 文章

Docker(撰写):让knex与postgres一起工作

提问于
浏览
0

我'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 回答

  • 1

    我假设您正在尝试在服务 app 中运行命令,当您看到此错误消息时(但也许您可以指定)?

    我的猜测是你正试图从 app 内连接 db:15432 . 注意,那个说

    ports:
      - "15432:5432"
    

    只确保您可以通过端口 15432 从主机调用该服务 . 但是如果你想从 app 中调用服务 db ,你仍然需要使用 db:5432 .

相关问题