Docker文件等待postgres容器

时间:2020-05-31 19:45:28

标签: postgresql docker docker-compose

您好,我的节点项目出现以下错误:

(节点:51)UnhandledPromiseRejection警告:错误:getaddrinfo ENOTFOUND $ {DB_HOST}

我在想问题是我的项目开始时我的postgress尚未开始 所以我无法想到一种解决方法,在我准备好postgres之后如何启动我的容器,我读到了有关do​​ckerize的一些知识,但是我无法想象如何应用

我的 docker文件:

FROM node:lts-alpine

RUN mkdir -p /home/node/api/node_modules && chown -R node:node /home/node/api

WORKDIR /home/node/api

COPY ormconfig.json .env package.json yarn.* ./

USER node

RUN yarn

COPY --chown=node:node . .

EXPOSE 4000

CMD ["yarn", "dev"]

我的 docker撰写:

version: '3.7'

services:
  ci-api:
    build: .
    container_name: ci-api
    volumes:
      - .:/home/node/api
      - /home/node/api/node_modules
    ports:
      - '${SERVER_PORT}:${SERVER_PORT}'
    depends_on:
      - ci-postgres
    networks:
      - ci-network
  ci-postgres:
    image: postgres:12
    container_name: ci-postgres
    ports:
      - '${DB_PORT}:5432'
    environment:
      - ALLOW_EMPTY_PASSWORD=no
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASS}
      - POSTGRES_DB=${DB_NAME}
    volumes:
      - ci-postgres-data:/data
    networks:
      - ci-network

volumes:
  ci-postgres-data:

networks:
  ci-network:
    driver: bridge

这是我的 .env

SERVER_PORT=4000
DB_HOST=ci-postgres
DB_PORT=5432
DB_USER=spirit
DB_PASS=api
DB_NAME=emasa_ci

1 个答案:

答案 0 :(得分:0)

您可以参考以下docker-compose.yml,其中添加了depends_onhealthchecklinks,因为Web服务取决于数据库服务。

参考: Postgresql Container is not running in docker-compose file - Why is this?

version: "3"
services:
  webapp:
    build: .
    container_name: webapp
    ports:
      - "5000:5000"
    links:
      - postgres
    depends_on:
      postgres:
        condition: service_healthy

  postgres:
    image: postgres:11-alpine
    container_name: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=tmp
      - POSTGRES_USER=tmp
      - POSTGRES_PASSWORD=tmp_password
    volumes:  # Persist the db data
      - database-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  database-data:
相关问题