gpt4 book ai didi

docker - 让 docker-compose 构建使用父容器的容器

转载 作者:行者123 更新时间:2023-12-02 18:22:20 25 4
gpt4 key购买 nike

我有一个设置,我正在从一组 shell 脚本迁移到 docker-compose。我要构建的容器使用由自定义 dockerfile 创建的父容器。但我看不到如何让 docker-compose (重新)构建必要的父容器。

一共有三个文件:

/code/containers/parent/DockerFile

FROM centos:7  
RUN... (rest of file to create common stuff used by multiple child images)

/code/containers/child-one/Dockerfile

FROM parent
RUN...

/code/docker-compose.yml

version: '3.3'
services:
my-service:
image: child-one
build:
dockerfile: containers/child-one/Dockerfile
context: .

正如预期的那样,它会失败:
服务“我的服务”构建失败:找不到存储库父级:不存在或没有拉取访问权限

除了手动运行 docker 先构建父镜像之外,找不到任何解决方案。

非常感谢任何想法。

编辑:基于 VonCs 的想法:

version: '3.3'
services:
parent-notservice;
image: parent
build:
dockerfile: containers/parent/Dockerfile
context: .

my-service:
image: child-one
depends_on:
parent
build:
dockerfile: containers/child-one/Dockerfile
context: .

但是我不得不使用depends_on,这是一个hack,我担心 parent 开始的影响(当 child 运行时)。这不是我的意图。

最佳答案

从 2021 年 1 月起,还有另一种方法可以使用 profiles 键来执行此操作。在 Docker Compose 1.28.0 中添加了对这个键的支持。

version: '3.9'
services:
parent-notservice:
build:
dockerfile: containers/parent/Dockerfile
context: .
profiles:
- donotstart

my-service:
image: parent-notservice

another-service:
build:
context: .
dockerfile: ./containers/service/Dockerfile

my-service 将直接基于 parent-notservice. 然后您可以添加任何 portsvolumes docker-compose.yml 文件中的该容器需要 >。

another-service 将从 Dockerfile 构建,该 Dockerfile 也可以基于 parent-notservice 使用 FROM 命令。然后可以在该容器上安装不属于父容器的其他包。

FROM parent-notservice
RUN...

最好的部分是当你使用 docker-compose upparent-notservice 不会启动。

profiles 键的更多文档可以在这里找到:https://docs.docker.com/compose/profiles/

关于docker - 让 docker-compose 构建使用父容器的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48334730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com