如何在docker-compose中基于同一自定义Dockerfile构建一次镜像启动多容器
解决方案
你只需要在公共锚定配置中新增一个统一的image字段指定镜像名即可,docker-compose会自动识别相同镜像名的构建需求,仅执行一次构建流程,两个服务的独立配置(容器名、专属环境变量)不受任何影响。
修改后的配置参考:
x-consumer: &consumer scale: 1 image: custom-consumer:latest # 新增统一镜像名 build: context: . dockerfile: ./consumers/Dockerfile environment: &consumer-env # 给公共环境变量加锚点方便后续合并 - APP_SETTINGS=config.Config - AWS_DEFAULT_REGION=us-east-1 - AWS_ACCESS_KEY=### - AWS_SECRET_ACCESS_KEY=###### function-consumer: <<: *consumer container_name: ${NAME_PREFIX}-function_consumer environment: - *consumer-env # 继承公共环境变量 - CONSUMER_NAME=FunctionWorker function-two-consumer: <<: *consumer container_name: ${NAME_PREFIX}-function_two_consumer environment: - *consumer-env # 继承公共环境变量 - CONSUMER_NAME=FunctionTwoWorker
方案说明
- docker-compose构建时会先校验指定的
custom-consumer:latest镜像是否存在本地,不存在才会执行build流程,不管有多少个服务引用这个镜像,只会构建一次 - 两个服务启动时都会基于这个唯一的本地镜像创建容器,各自的容器名、环境变量差异完全保留
- 不需要预构建镜像,不需要额外加depend_on配置,也不需要修改你现有编排的核心结构,符合你持续使用docker-compose的需求
- 执行构建或启动命令后,本地只会生成一个
custom-consumer:latest镜像,不会再生成两个重复的服务同名镜像
内容的提问来源于stack exchange,提问作者AmagicalFishy
相关产品推荐
相关产品推荐

