我正在构建一个新镜像并将内容从主机操作系统文件夹 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: Error response from daemon: invalid volume specification: ''. See '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
更新 cp
命令基于@Makariy 的反馈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
我得到:Error: No such container:path: 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 .
Step 2/2 : COPY scrapy to /root/scrapy COPY failed: file not found in build context or excluded by .dockerignore: stat to: file does not exist
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
最佳答案
关于image - 将内容从主机操作系统复制到 Docker 镜像中,而无需重建镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69103701/