Docker Compose构建镜像名称不一致原因及无配置修改方案咨询
Docker Compose构建镜像名称不一致问题解析
问题原因
这是Docker Compose 1.29.2版本的已知行为差异:
- 执行
docker-compose build(不指定具体服务)时,Compose会用项目名加短横线拼接服务名生成镜像名,格式为<project-name>-<service-name>。这里项目名默认取当前目录名project,所以生成project-app。 - 执行
docker-compose -f docker-compose.yml build app1(指定单个服务)时,Compose会用项目名加下划线拼接服务名生成镜像名,格式为<project-name>_<service-name>,因此生成project_app。
这种差异源于旧版本Compose在不同构建场景下的命名逻辑不一致。
无需修改配置文件的固定镜像名称方法
有两种可行方案:
显式指定项目名称构建
使用-p参数指定项目名,无论是否指定服务,都会统一使用下划线拼接的命名规则:# 指定服务构建 docker-compose -p myproject -f docker-compose.yml build app1 # 构建所有服务 docker-compose -p myproject build两种命令生成的镜像名均为
myproject_app1。通过环境变量指定项目名称
设置COMPOSE_PROJECT_NAME环境变量,同样能统一命名规则:# 临时环境变量方式构建单个服务 COMPOSE_PROJECT_NAME=myproject docker-compose -f docker-compose.yml build app1 # 临时环境变量方式构建所有服务 COMPOSE_PROJECT_NAME=myproject docker-compose build执行后生成的镜像名均为
myproject_app1。
内容的提问来源于stack exchange,提问作者Andy Li
相关产品推荐
相关产品推荐

