为什么docker-compose执行up --build时尝试拉取镜像而非本地构建?
问题原因与解决方案
故障原因
- 你的
docker-compose.yml配置错误:你存在自定义mysql镜像的Dockerfile,但compose配置里没有加build字段指定构建上下文,只会默认尝试拉取官方仓库的镜像,不会走本地构建逻辑 - 重装Docker后,你本地之前存储的同名/同标签镜像被清空,Docker Compose检测到原有服务关联的镜像丢失,触发了镜像移除提示
- 报错中出现
mysql:(标签为空)是因为配置的image: mysql没有指定明确版本标签,原有本地镜像丢失后,拉取无标签镜像会触发仓库访问拒绝错误 - 额外注意:你配置了
external: true的外部网络network,如果重装Docker后该网络被删除也会导致后续启动失败
修复步骤
调整
docker-compose.yml配置,根据你的使用场景二选一即可:- 如果你需要使用本地Dockerfile构建自定义镜像,补充
build字段,示例如下:version: "3.7" networks: default: external: true name: network services: mysql: ports: - "13306:3306" container_name: mysql build: . # 新增:指定Dockerfile所在的当前目录为构建上下文 image: custom-mysql:8 # 可替换为你自定义的镜像名+标签,避免和官方镜像冲突 #environment: # - MYSQL_ROOT_PASSWORD=dbPass - 如果你不需要使用自定义镜像,直接使用官方mysql镜像,只需要给
image字段补充明确版本标签即可,不需要加build字段:image: mysql:8
- 如果你需要使用本地Dockerfile构建自定义镜像,补充
先确认依赖的外部网络存在,不存在则创建:
执行命令检查网络:docker network ls | grep network
如果没有输出,执行创建命令:docker network create network清理重装Docker后残留的无效容器、镜像记录,避免冲突:
docker container prune -f docker image prune -f重新执行构建启动命令:
docker-compose up --build
当弹出是否继续使用新镜像的提示时,只要你没有手动删除过mysql对应的数据卷,数据不会丢失,直接输入y回车即可。如果担心数据问题,可以先执行数据卷备份再操作。
内容的提问来源于stack exchange,提问作者yungweezy
相关产品推荐
相关产品推荐

