You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不重建Docker镜像,将宿主机文件更新到镜像内指定目录

解决方案

首先明确你之前操作失败的核心原因:

  • Dockerfile中COPY scrapy to /root/scrapy语法错误,to是多余参数,Docker将其识别为要复制的第二个文件,所以报找不到to文件的错误
  • 执行docker cp时未在源路径末尾加路径分隔符,导致整个scrapy目录被复制到目标路径下形成/root/scrapy/scrapy层级,所以原路径下看不到新内容
  • Windows容器的挂载路径格式要求与Linux容器不同,且你本身不接受运行时挂载方案,可忽略该方向

方案1:docker cp + commit (最快,无需修改配置)

操作步骤如下:

  • 启动临时后台容器,避免执行完命令直接退出:
docker run -d --name temp_scrapy scrapy ping -t localhost
  • 正确执行文件复制,注意源路径末尾加反斜杠,代表复制目录内的所有内容到目标路径:
docker cp D:\Programs\scrapy\ temp_scrapy:/root/scrapy/
  • 将修改后的容器提交为新镜像,可直接覆盖原有镜像标签:
docker commit temp_scrapy scrapy:latest
  • 清理临时容器:
docker rm -f temp_scrapy

该方案完全复用原有镜像的所有层,仅新增修改层,耗时仅取决于你要复制的文件大小,无需任何重建操作。

方案2:优化分层构建(适合频繁迭代更新)

修正你的分层构建逻辑,后续每次更新仅执行COPY层构建,不会重新构建系统基础层:

  1. 调整image_addons目录结构,确保要复制的scrapy目录和Dockerfile在同一级:
D:\Programs\image_addons
├─ Dockerfile
└─ scrapy/ (存放所有要更新的scrapy内容)
  1. 修正Dockerfile B的语法,删除多余的to参数:
FROM scrapybase
COPY scrapy /root/scrapy
  1. 每次更新scrapy内容后,在D:\Programs\image_addons目录下执行构建即可:
docker build -t scrapy .

该方案会复用之前构建好的scrapybase基础镜像缓存,仅执行COPY操作,构建速度极快,且构建过程可追溯,适合多次迭代的场景。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:54:01