【发布时间】:2021-09-08 13:08:26
【问题描述】:
我正在构建一个新图像并将主机操作系统文件夹 D:\Programs\scrapy 中的内容复制到其中,如下所示:docker build . -t scrapy
Dockerfile
FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
RUN mkdir root
RUN cd root
WORKDIR /root
RUN mkdir scrapy
COPY scrapy to /root/scrapy
现在,当我将新内容添加到主机操作系统文件夹“D:\Programs\scrapy”时,我还想将其添加到图像文件夹“root/scrapy”,但我不想构建一个全新的图像(这需要相当长的时间)。
那么如何保留现有图像并仅覆盖图像文件夹“root/scrapy”的内容。
另外:我不想每次运行时都复制新内容容器(所以不在运行时),我只想有一个单独的命令来向现有图像添加更多文件,然后在另一个时间基于该图像运行一个新容器。
我在这里检查过:How to update source code without rebuilding image(但不确定 OP 是否会尝试和我做同样的事情)
更新 1
检查What is the purpose of VOLUME in Dockerfile 和docker --volume format for Windows
我尝试了以下命令,都导致错误:
docker:来自守护程序的错误响应:无效的卷规范:''。请参阅“docker run --help”。
其中<pathiused> 是例如D:/Programs/scrapy:/root/scrapy
docker run -v //D/Programs/scrapy:/root/scrapy scrapy
docker run -v scrapy:/root/scrapy scrapy
docker run -it -v //D/Programs/scrapy:/root/scrapy scrapy
docker run -it -v scrapy:/root/scrapy scrapy
根据@Makariy 的反馈使用cp 命令更新
docker images -a 给出:
REPOSITORY TAG IMAGE ID CREATED SIZE
scrapy latest e35e03c8cbbd 29 hours ago 5.71GB
<none> <none> 2089ad178feb 29 hours ago 5.71GB
<none> <none> 6162a0bec2fc 29 hours ago 5.7GB
<none> <none> 116a0c593544 29 hours ago 5.7GB
mcr.microsoft.com/windows/servercore ltsc2019 d1724c2d9a84 5 weeks ago 5.7GB
我运行 docker run -it scrapy 然后 docker container ls 给出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fcda458a14c scrapy "c:\\windows\\system32…" About a minute ago Up About a minute thirsty_bassi
如果我运行docker cp D:\Programs\scrapy scrapy:/root/scrapy,我会得到:
错误:没有这样的容器:路径:scrapy:\root
所以我在一个单独的 PowerShell 实例中运行 docker cp D:\Programs\scrapy thirsty_bassi:/root/scrapy,它在 PowerShell 中没有任何输出,所以我认为它应该做点什么。
但是在我的容器实例中,当我转到 /root/scrapy 文件夹时,我只能看到构建映像时已经添加的文件,而不是我想要添加的新文件。
另外,我想我在这里将文件添加到容器中,但是没有办法将它添加到图像中吗?不重建整个图像?
更新 2
我的文件夹结构:
D:\Programs
Dockerfile
\image_addons
Dockerfile
\scrapy
PS D:\Programs>docker build . -t scrapybase
成功搭建95676d084e28
成功标记 scrapybase:latest
PS D:\Programs\image_addons> docker build -t scrapy .
第 2/2 步:将 scrapy 复制到 /root/scrapy 复制失败:在构建上下文中找不到文件或被 .dockerignore 排除:stat to:文件不存在
Dockerfile A
FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
WORKDIR /root/scrapy
Dockerfile B
FROM scrapybase
COPY scrapy to /root/scrapy
【问题讨论】:
-
Docker 镜像是静态的,如果你需要动态的话。你最好在运行时尝试
volume。
标签: image docker copy containers