docker-compose多个服务使用相同镜像时如何强制生成独立容器
解决docker-compose同镜像服务生成独立容器的方案
你当前的配置本身就会为不同服务生成独立容器,出现异常大概率是两个服务同时配置了build字段和相同的image标签,导致构建时镜像互相覆盖,按以下步骤调整即可:
- 给两个服务指定不同的自定义镜像标签,避免构建产物覆盖
将api服务的image: golang:1.17修改为自定义镜像名,例如image: proj-api:latest;将admin服务的image: golang:1.17修改为image: proj-admin:latest,其余配置保持不变。
如果不需要手动指定构建后的镜像名,也可以直接删除两个服务的image字段,docker-compose会自动为每个服务生成唯一的镜像标识,无需手动管理标签。
调整后的服务配置片段示例:
api: image: proj-api:latest # 替换原有公共镜像标签,也可直接删除该行 container_name: proj-api env_file: ../cryptoModuleAPI/.env.${PROJ_ENV} restart: always build: ../cryptoModuleAPI/ # 剩余原有配置保持不变 --- admin: image: proj-admin:latest # 替换原有公共镜像标签,也可直接删除该行 container_name: proj-admin env_file: ../admin/.env.${PROJ_ENV} restart: always build: ../admin/ # 剩余原有配置保持不变
- 启动服务时添加
--build参数,强制重新构建两个服务的独立镜像
执行命令:
docker-compose up --build
原理说明
当docker-compose服务同时配置build和image字段时,会先按照build指定的上下文构建镜像,再将构建好的镜像打上image字段设置的标签。两个服务使用相同的image标签会导致后构建的镜像覆盖先构建的镜像,修改为不同标签或删除image字段后,两个服务就会使用各自的镜像启动完全独立的容器。
内容的提问来源于stack exchange,提问作者IvRRimUm
相关产品推荐
相关产品推荐

