Flo*_*Flo 6 containers copy image docker
我正在构建一个新映像,并将主机操作系统文件夹 D:\\Programs\\scrapy 中的内容复制到其中,如下所示:docker build . -t scrapy
Dockerfile
\nFROM mcr.microsoft.com/windows/servercore:ltsc2019\nSHELL ["powershell", "-Command", "$ErrorActionPreference = \'Stop\'; $ProgressPreference = \'SilentlyContinue\';"]\n\nRUN mkdir root\nRUN cd root\nWORKDIR /root\nRUN mkdir scrapy\nCOPY scrapy to /root/scrapy\n\n \nRun Code Online (Sandbox Code Playgroud)\n现在,当我将新内容添加到主机操作系统文件夹“D:\\Programs\\scrapy”时,我还想将其添加到图像文件夹“root/scrapy”,但我不想构建一个全新的图像( \n那么我如何保留现有图像并覆盖图像文件夹“root/scrapy”的内容。
\n另外:我不想每次运行容器时都复制新内容(所以不是在运行时),我只想有一个单独的命令将更多文件添加到现有映像,然后运行另一个时间基于该图像的新容器。
我在这里检查:如何在不重建图像的情况下更新源代码(但不确定OP是否尝试与我做同样的事情)
\n更新1
\n检查Windows 的Dockerfile和docker --volume 格式中 VOLUME 的用途是什么
\n我尝试了以下命令,均导致错误:
\n\n\ndocker:来自守护程序的错误响应:无效的卷规范:\'\'。请参阅“docker run --help”。
\n
<pathiused>例如在哪里D:/Programs/scrapy:/root/scrapy
docker run -v //D/Programs/scrapy:/root/scrapy scrapy\n\ndocker run -v scrapy:/root/scrapy scrapy\n\ndocker run -it -v //D/Programs/scrapy:/root/scrapy scrapy\n\ndocker run -it -v scrapy:/root/scrapy scrapy\nRun Code Online (Sandbox Code Playgroud)\ncp根据 @Makariy\ 的反馈更新命令
docker images -a给出:
REPOSITORY TAG IMAGE ID CREATED SIZE\nscrapy latest e35e03c8cbbd 29 hours ago 5.71GB\n<none> <none> 2089ad178feb 29 hours ago 5.71GB\n<none> <none> 6162a0bec2fc 29 hours ago 5.7GB\n<none> <none> 116a0c593544 29 hours ago 5.7GB\nmcr.microsoft.com/windows/servercore ltsc2019 d1724c2d9a84 5 weeks ago 5.7GB\nRun Code Online (Sandbox Code Playgroud)\n我运行docker run -it scrapy然后docker container ls给出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n1fcda458a14c scrapy "c:\\\\windows\\\\system32\xe2\x80\xa6" About a minute ago Up About a minute thirsty_bassi\nRun Code Online (Sandbox Code Playgroud)\n如果我运行docker cp D:\\Programs\\scrapy scrapy:/root/scrapy我会得到:
\n\n错误:没有这样的容器:路径:scrapy:\\root
\n
因此,在一个单独的 PowerShell 实例中,我运行了docker cp D:\\Programs\\scrapy thirsty_bassi:/root/scrapyPowerShell 中没有显示任何输出的命令,所以我认为它应该已经做了一些事情。
但是,在我的容器实例中,当我转到 /root/scrapy 文件夹时,我只看到构建图像时已添加的文件,而不是我想要添加的新文件。
\n另外,我想我正在将文件添加到此处的容器中,但是没有办法将其添加到图像中吗?不重建整个图像?
\n更新2
\n我的文件夹结构:
\nD:\\Programs\n Dockerfile\n \\image_addons\n Dockerfile\n \\scrapy\nRun Code Online (Sandbox Code Playgroud)\nPS D:\\Programs>docker build . -t scrapybase
已成功构建 95676d084e28
\n已成功标记 scrapybase:latest
PS D:\\Programs\\image_addons> docker build -t scrapy .
\n\n步骤 2/2 :将 scrapy 复制到 /root/scrapy\n复制失败:在构建上下文中找不到文件或被 .dockerignore 排除:stat 到:文件不存在
\n
Dockerfile A
\nFROM mcr.microsoft.com/windows/servercore:ltsc2019\nSHELL ["powershell", "-Command", "$ErrorActionPreference = \'Stop\'; $ProgressPreference = \'SilentlyContinue\';"]\nWORKDIR /root/scrapy\nRun Code Online (Sandbox Code Playgroud)\nDockerfile B
\nFROM scrapybase\nCOPY scrapy to /root/scrapy\nRun Code Online (Sandbox Code Playgroud)\n
您无法在不(至少部分地)重建 Docker 映像的情况下更改它。但您不必重建所有内容,只需重建复制内容的图层即可scrapy。
您可以优化您的构建以拥有两个图像:
scrapy-base。scrapy-base,仅用于复制动态scrapy内容的目的scrapy-base的 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
Run Code Online (Sandbox Code Playgroud)
并像这样构建它:
docker build -t scrapy-base .
Run Code Online (Sandbox Code Playgroud)
该命令只需运行一次。如果您只更改本地文件夹的内容,则无需构建此映像scrapy。(如您所见,构建根本不使用它)
scrapy的 Dockerfile:
FROM scrapy-base
COPY scrapy /root/scrapy
Run Code Online (Sandbox Code Playgroud)
使用构建命令:
docker build -t scrapy .
Run Code Online (Sandbox Code Playgroud)
第二个构建命令将重新使用以前的静态映像,并且仅复制内容,而无需重建整个映像。即使有很多文件,速度也应该很快。您不需要有一个正在运行的容器。
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |