image - 将内容从主机操作系统复制到 Docker 镜像中,而无需重建镜像

标签 image docker copy containers

我正在构建一个新镜像并将内容从主机操作系统文件夹 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 Dockerfiledocker --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:latestPS 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

最佳答案

您还可以使用 docker cp,手动将文件从主机复制到正在运行的容器

docker cp ./path/to/file containername:/another/path
Docs

关于image - 将内容从主机操作系统复制到 Docker 镜像中,而无需重建镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69103701/

相关文章:

c# - 使用C#复制excel中的单元格

Javascript 剪贴板 API write() 在 Safari 中不起作用

css before background-image 不会显示,只有放在内容上才会显示,为什么?

jquery - 使用 jQueryeach 获取图像高度

python - 在 Python 中围绕指定原点旋转二维图像

docker - Jenkins和SonarQube在同一个Docker容器中

linux - 与 docker 容器共享虚拟网络

html - 动态插入的img元素的CSS全高

bash - 在Packer脚本中更改文件(使用sed)使文件保持不变

r - 准确理解何时 data.table 是对另一个 data.table 的引用(而不是其副本)