这就是我的意思。如何编写 docker-compose.yaml 文件,以便在“构建”其中一个服务时,它首先运行另一个服务?
我会尝试更具体。我正在尝试使用数据库库 JOOQ 构建 Java 应用程序,它希望在构建时连接到数据库以生成与数据库表对应的 Java 类。我想要 Dockerfile(s) 和 docker-compose.yaml 文件的某种组合,以便以下大致按以下顺序发生。
- 启动“数据库”服务(在我的情况下,使用 postgres 图像)。
- 在我的开发存储库中使用 SQL 脚本初始化数据库。
- 我的“web”服务的构建阶段运行,它使用同一个 repo 中的 Dockerfile,它调用 Gradle 构建,它告诉 JOOQ 连接到在步骤 1 中启动的数据库服务。这会生成 Java 文件,编译它们,然后用于构建容器的所有其他内容。
- “web”服务启动,连接到步骤 1 中启动的数据库服务。
这是我正在使用的 docker-compose.yaml 文件
version: '3.7'
services:
postgres:
image: postgres:10.5-alpine
restart: always
ports:
- "6432:5432"
environment:
POSTGRES_DB: flashtools
POSTGRES_USER: flashtools
POSTGRES_PASSWORD: flashtools
volumes:
- ./src/main/scripts/01_init.sql:/docker-entrypoint-
initdb.d/01_init.sql
web:
build: .
network_mode: host
depends_on:
- postgres
ports:
- "8080:8080"
我会用更多细节来充实这一点,但希望我所问的非常简单。