代码之家  ›  专栏  ›  技术社区  ›  boehm_s

Docker(撰写):使Knex与Postgres一起工作

  •  0
  • boehm_s  · 技术社区  · 8 年前

    我正在尝试对nodejs/postgresql应用进行Dockerize,但无法运行 knex 迁移,我得到以下错误:

    错误:Connect EconnRejected 172.18.0.2:15432
    在tcpconnectwrap.afterconnect[完成时](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
    

    这个 文档文件 对于“应用程序”服务:

    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
    

    而且在 开始.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 回复  |  直到 8 年前
        1
  •  1
  •   the-bass    8 年前

    我想你是想在服务内部运行一个命令 app 当您看到此错误消息时(但也许您可以指定)?

    我想你应该是想和 db:15432 从内部 应用程序 . 注意,那句话

    ports:
      - "15432:5432"
    

    只确保您可以从 主办 机器在端口上 15432 . 但是如果你想打电话给服务部 db 从内部 应用程序 ,你还得用 db:5432 .