【问题标题】:run script on docker file to wait postgress在 docker 文件上运行脚本以等待 postgres
【发布时间】:2020-05-31 23:34:34
【问题描述】:

您好,我是 docker 和 linux 新手,我不知道如何为我的 docker 在 postgress 之后运行脚本

这是我的脚本:

until psql -c '\l'; do
  echo >&2 "$(date +%Y%m%dt%H%M%S) Postgres is unavailable - sleeping"
  sleep 1
done
echo >&2 "$(date +%Y%m%dt%H%M%S) Postgres is up - executing command"

exec ${@}

我的码头文件:

FROM node:lts-alpine

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

WORKDIR /home/node/api

COPY wait-pg.sh ormconfig.json .env package.json yarn.* ./

USER node

RUN yarn

COPY --chown=node:node . .

EXPOSE 4000

RUN chmod +x /wait-pg.sh

CMD ["yarn", "dev"]

我的码头工人撰写:

version: '3.7'
services:
  db-pg:
    image: postgres:12
    container_name: db-pg
    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

  ci-api:
    build: .
    container_name: ci-api
    volumes:
      - .:/home/node/api
      - /home/node/api/node_modules
    ports:
      - '${SERVER_PORT}:${SERVER_PORT}'
    depends_on:
      - db-pg
    logging:
      driver: 'json-file'
      options:
        max-size: '10m'
        max-file: '5'

volumes:
  ci-postgres-data:

如果有人可以像我在 docker compose 和 dockerfile 中那样帮助我。 我想知道如何将我的脚本添加到我的 docker 文件和 docker compose

【问题讨论】:

  • 如果您只想检查 postgres 是否启动,请考虑使用healthchecks
  • 我尝试了健康检查,但没有成功,我看到在版本 3 中,依赖项的条件已停止
  • 你能帮我做脚本和健康检查吗?
  • 下面问题的答案可以帮到你Unable to connect mysql from docker container?
  • @MostafaHussein 我试试这个,但我不只是使用 docker-compose 所以我有疑问

标签: postgresql docker docker-compose


【解决方案1】:

查看下方Dockerfile

FROM node:lts-alpine

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

WORKDIR /home/node/api

COPY wait-pg.sh ormconfig.json .env package.json yarn.* ./

USER node

RUN yarn

COPY --chown=node:node . .

EXPOSE 4000

CMD ["yarn", "dev"]

请尝试以下docker-compose.yml,其中depends_onhealthchecklinks 添加为web 服务依赖于db 服务。

version: "2.1"
services:
  ci-api:
    build: .
    container_name: ci-api
    volumes:
      - .:/home/node/api
      - /home/node/api/node_modules
    ports:
      - '${SERVER_PORT}:${SERVER_PORT}'
    links:
      - db-pg
    depends_on:
      - db-pg
    logging:
      driver: 'json-file'
      options:
        max-size: '10m'
        max-file: '5'

  db-pg:
    image: postgres:12
    container_name: db-pg
    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
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  ci-postgres-data:

【讨论】:

  • 我收到了这个错误:db-pg | 2020-06-01 00:15:48.696 UTC [67] 致命:数据库“postgress”不存在
  • 在提到variables 的地方传递了哪些值
  • SERVER_PORT=4000 DB_HOST=db-pg DB_PORT=5432 DB_USER=spirit DB_PASS=api DB_NAME=emasa_ci
  • 你可以试试'2.1' 版本吗?
  • 获得致命:角色“postgres”不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多