我有以下文件夹结构:
my_package
|- docker_compose.yml
|- a
|- Dockerfile
|- b
|- Dockerfile
在这里,我的
docker-compose.yml
是:
version: '2'
services:
a:
build:
context: a
dockerfile: Dockerfile
b:
build:
context: b
dockerfile: Dockerfile
当我运行
docker-compose build
时,我期望输出两个图像,一张用于 a
,一张用于 b
。
这里
a/Dockerfile
FROM ubuntu
RUN touch AAA
这里
b/Dockerfile
FROM <a> # NOT SURE WHAT TO PUT HERE
RUN touch BBB
我希望
b
映像在根目录中包含两个文件,AAA
和 BBB
,这需要一个 Dockerfile 依赖于另一个文件。
这可能吗?是否有任何解决方法可以在一个
docker-compose build
命令中构建两个 Docker 映像(它们之间具有依赖关系)?
我坚持使用
Docker version 1.12.6, build 78d1802
(仅与版本 2 语法兼容)。
您可以在 docker-compose.yml 中使用
depends_on
,我知道它在 docker-compose YAML 版本 3 中可用,以表示服务 B 依赖于 A,并且 docker-compose 将遵循您表达的依赖关系链并构建 A第一的。请参阅here对depends_on的解释。
由于 B 来自 A,因为 B 的 Dockerfile 表示文件 AAA 和 BBB 将在服务 B 中可用,只要文件 AAA 和文件 BBB 的权限相同,并且在这种情况下,您在这两个服务中都以 root 身份运行当您执行 touch 命令时 A 和服务 B。
version: '3'
services:
a:
build:
context: a
image: a
dockerfile: Dockerfile
b:
build:
context: b
image: b
dockerfile: Dockerfile
depends_on:
- a
编辑(由OP):
depends_on
,但使用数组。image
来指定生成的镜像,这样才能生成b
FROM a
如果将
a/Dockerfile
移至 a.Dockerfile
:
mv my_package/a{/,.}Dockerfile
然后可以这样做:
services:
b:
build:
context: .
dockerfile: b.Dockerfile
与
FROM a