docker-compose使用远程--context构建时为何使用旧镜像且文件缺失?
问题根源
你遇到的是docker-compose跨远程context部署时的已知镜像匹配逻辑缺陷,核心原因是你的docker-compose.yaml没有为服务显式指定镜像名:
- 未设置
image字段时,docker-compose默认使用[当前目录名]-[服务名]作为默认镜像名,没有固定标签的情况下,远程Docker daemon即使完成了新镜像构建,启动容器时仍有可能误匹配到旧的同名镜像,哪怕构建日志显示COPY层没有走缓存、已重新执行。 - 你之前删除远程容器和镜像后恢复正常,也正好印证了旧同名镜像干扰的问题。
修复步骤
- 修改
docker-compose.yaml,为web服务显式指定固定的镜像名和标签:
version: "3.9" services: web: build: . image: my-node-web:latest # 新增此行,镜像名可自定义 ports: - "1234:4321" restart: always
- 执行远程部署命令时新增
--pull never参数,避免远程daemon尝试拉取公开的同名镜像,强制使用本次构建的本地上下文生成的镜像:
docker-compose --context server up --build --pull never -d
验证方法
部署完成后可以先检查远程镜像的创建时间,确认是本次构建生成的新版本:
docker --context server images my-node-web:latest
此时进入容器即可看到新增的testing.txt文件。
内容的提问来源于stack exchange,提问作者Noah May
相关产品推荐
相关产品推荐

