制作一张 Docker 图像等待另一张图像完成后再构建
Make one Docker image wait for another to finish before building
我是 docker 的新手(提前为我的术语错误/我的知识空白道歉)并且有三个服务,其中一个依赖于一个在构建之前完成。
repo 设置为将它们都作为子模块,并由以下 docker 文件组成。
version: "3"
services:
db:
image: postgres:12.3
restart: always
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_INITDB_ARGS: "--data-checksums"
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
actions:
build:
context: ./action-handlers
dockerfile: Dockerfile.stg
depends_on:
- hasura
environment:
HASURA_GRAPHQL_ENDPOINT: http://hasura:8080/v1/graphql
HASURA_GRAPHQL_ADMIN_SECRET: my-super-secret-password
ENVIRONMENT: ${ENVIRONMENT}
NODE_ENV: ${NODE_ENV}
PORT: 5000
hasura:
ports:
- 8080:8080
- 9691:9691
build:
context: ./hasura
dockerfile: .docker/Dockerfile.stg
depends_on:
- db
environment:
ACTION_BASE_URL: http://actions:5000
HASURA_GRAPHQL_ACTIONS_HANDLER_WEBHOOK_BASEURL: http://actions:5000
HASURA_GRAPHQL_ADMIN_SECRET: my-super-secret-password
HASURA_GRAPHQL_CONTAINER_HOST_PORT: 8080
HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
HASURA_GRAPHQL_UNAUTHORIZED_ROLE: "public"
DB_NAME: $DB_NAME
HASURA_GRAPHQL_DATABASE_URL: "postgres://postgres:postgres@db:5432/$DB_NAME"
volumes:
db_data:
需要 Hasura 启动和 运行ning 才能正确设置的 actions are an extension of Hasura。 docker 文件如下所示:
FROM node
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
CMD ["npm", "run", "graphql", "&&", "npm", "run", "start"]
yarn graphql
文件使用 graphql-codegen
从 Hasura 下载 graphql 模式。
是否可以编排 docker 等待 Hasura 实例准备就绪后再构建操作?或者我是否需要一个 bash 脚本,如果是这样的话,它看起来像什么 运行?我正在寻找的是一个解决方案,其中 npm run graphql
不断重新 运行 直到它能够从 Hasura 下载 graphql 模式,然后 运行 npm run start
.
我有点力不从心,所以任何见解或提示都将不胜感激。我已经尝试在本地存储 graphql 模式(所以我不需要等待 Hasura 准备好获取它)但这实际上不起作用,因为我需要 Hasura 和同步的操作(因此从中获取模式) Hasura 在构建时)。我还联系了 graphql-coden
的团队,他们提到没有 CLI 标志或配置允许他们的代码继续重试下载架构,直到它准备就绪。
这很老套,但您可以将撰写文件的版本还原为 2.1,然后使用旧的和已弃用的“依赖项”以及可以从 SQL 命令发出所有内容的健康检查到 CURL 命令以证明相关容器已准备就绪。
我能够通过使用这个问题的公认解决方案来解决这个问题:。
我是 docker 的新手(提前为我的术语错误/我的知识空白道歉)并且有三个服务,其中一个依赖于一个在构建之前完成。
repo 设置为将它们都作为子模块,并由以下 docker 文件组成。
version: "3"
services:
db:
image: postgres:12.3
restart: always
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_INITDB_ARGS: "--data-checksums"
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
actions:
build:
context: ./action-handlers
dockerfile: Dockerfile.stg
depends_on:
- hasura
environment:
HASURA_GRAPHQL_ENDPOINT: http://hasura:8080/v1/graphql
HASURA_GRAPHQL_ADMIN_SECRET: my-super-secret-password
ENVIRONMENT: ${ENVIRONMENT}
NODE_ENV: ${NODE_ENV}
PORT: 5000
hasura:
ports:
- 8080:8080
- 9691:9691
build:
context: ./hasura
dockerfile: .docker/Dockerfile.stg
depends_on:
- db
environment:
ACTION_BASE_URL: http://actions:5000
HASURA_GRAPHQL_ACTIONS_HANDLER_WEBHOOK_BASEURL: http://actions:5000
HASURA_GRAPHQL_ADMIN_SECRET: my-super-secret-password
HASURA_GRAPHQL_CONTAINER_HOST_PORT: 8080
HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
HASURA_GRAPHQL_UNAUTHORIZED_ROLE: "public"
DB_NAME: $DB_NAME
HASURA_GRAPHQL_DATABASE_URL: "postgres://postgres:postgres@db:5432/$DB_NAME"
volumes:
db_data:
需要 Hasura 启动和 运行ning 才能正确设置的 actions are an extension of Hasura。 docker 文件如下所示:
FROM node
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
CMD ["npm", "run", "graphql", "&&", "npm", "run", "start"]
yarn graphql
文件使用 graphql-codegen
从 Hasura 下载 graphql 模式。
是否可以编排 docker 等待 Hasura 实例准备就绪后再构建操作?或者我是否需要一个 bash 脚本,如果是这样的话,它看起来像什么 运行?我正在寻找的是一个解决方案,其中 npm run graphql
不断重新 运行 直到它能够从 Hasura 下载 graphql 模式,然后 运行 npm run start
.
我有点力不从心,所以任何见解或提示都将不胜感激。我已经尝试在本地存储 graphql 模式(所以我不需要等待 Hasura 准备好获取它)但这实际上不起作用,因为我需要 Hasura 和同步的操作(因此从中获取模式) Hasura 在构建时)。我还联系了 graphql-coden
的团队,他们提到没有 CLI 标志或配置允许他们的代码继续重试下载架构,直到它准备就绪。
这很老套,但您可以将撰写文件的版本还原为 2.1,然后使用旧的和已弃用的“依赖项”以及可以从 SQL 命令发出所有内容的健康检查到 CURL 命令以证明相关容器已准备就绪。
我能够通过使用这个问题的公认解决方案来解决这个问题: