【问题标题】:Docker file wait for postgres containerDocker 文件等待 postgres 容器
【发布时间】:2020-06-01 08:29:05
【问题描述】:

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

(节点:51)UnhandledPromiseRejectionWarning:错误:getaddrinfo ENOTFOUND ${DB_HOST}

我在想问题是我的项目开始时我的 postgress 还没有开始 所以我想不出在我的 postgres 准备好后如何启动我的容器的解决方案,我读了一些关于 dockerize 的东西,但我无法想象如何应用

我的 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

【问题讨论】:

标签: postgresql docker docker-compose


【解决方案1】:

您可以参考下面的docker-compose.yml,其中添加了depends_onhealthchecklinks,因为web服务依赖于db服务。

参考: 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:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多