我对 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 的扩展,需要 Hasura 启动并运行才能正确设置。这是 docker 文件的样子:
FROM node
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
CMD ["npm", "run", "graphql", "&&", "npm", "run", "start"]
该yarn graphql
文件使用graphql-codegen
.
是否可以编排 docker 在构建操作之前等待 Hasura 实例准备好?或者我是否需要一个 bash 脚本,如果需要,它会是什么样子并运行?我正在寻找的是一种解决方案,npm run graphql
它会不断重新运行,直到它能够从 Hasura 下载 graphql 模式,然后运行npm run start
.
我有点超出我的深度,所以任何见解或提示都值得赞赏。我已经尝试在本地存储 graphql 模式(所以我不需要等待 Hasura 准备好获取它)但是这实际上不起作用,因为我需要 Hasura 和要同步的操作(因此从Hasura 在构建时)。我还与团队联系,graphql-coden
他们提到没有 CLI 标志或配置允许他们的代码继续重试下载模式,直到它准备好。