【发布时间】:2019-03-18 05:06:55
【问题描述】:
这就是我的意思。如何编写 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"
我会用更多细节来充实这一点,但希望我的要求非常简单。
【问题讨论】:
-
您的撰写文件有任何问题吗?
-
这就是我们有depends_on的原因。如果服务
A依赖于B,则首先运行B -
没有。这不是我们有
depends_on的原因。是的,如果服务A依赖于B,那么B在A运行(启动容器)之前运行(启动容器),但这并没有说明Docker 何时为A构建映像.我的撰写文件的问题是,无论 running 服务的depends_on是什么,A的 building_ofA都发生在B的 _running 之前。如果构建A需要首先运行B,那将是一个问题。我怀疑在 Docker Compose 中没有办法做到这一点。 -
正如我所说,我怀疑是not possible。我将把这个问题保持一段时间,然后如果没有人提出更好的答案,我会自己关闭它。
-
@DavidVentimiglia 嘿,你最后是怎么解决你的问题的?
标签: database postgresql docker docker-compose jooq