Docker COPY主机$ {HOME} /。cache到容器

use*_*162 6 docker

我想将我的winetricks缓存复制到docker容器中:

主办:

~/.cache/winetricks
Run Code Online (Sandbox Code Playgroud)

到集装箱

/home/myUser/.cache/winetricks.
Run Code Online (Sandbox Code Playgroud)

我当前的方法是在docker根目录中创建缓存的副本,并用于COPY将缓存移至容器。这将使高速缓存在构建时可用。

我正在使用这种方法来节省构建时间。Docker COPY命令在生产中已被注释掉。

所以这是我的问题:为什么我必须复制~/.cache目录?为什么无法将目录从Docker根目录外部复制到容器中?

BMi*_*tch 5

所以这是我的问题:为什么我必须复制我的 ~/.cache 目录?为什么我不能将 docker root 外部的目录复制到容器中?

docker build命令的第一步是将构建上下文发送到执行构建的 docker 引擎。此引擎可能位于远程服务器上。此构建上下文通常.位于命令行末尾,指示将当前目录作为上下文发送。

此上下文用于每个COPYandADD命令,上下文中未包含的任何文件对COPYand不可用ADD。更改行为以允许访问主机上的所有文件将破坏 docker 构建的客户端/服务器设计并引入一个安全漏洞,有人可以将恶意 Dockerfile 发送到构建服务器并使用它从服务器提取机密数据到图片。

您可以将构建上下文更改为您的主目录,而不是您的项目子目录。要做到这一点,你想也需要更新所有的COPYADD命令与相对路径$HOME。当您的整个主目录被发送到服务器时,您还会看到明显更长的构建时间。

对于您的具体问题,有一项新功能刚刚进入实验阶段,名为BuildKit。正在实施的第一个功能之一是RUN命令期间挂载目录,以便您只想提取一次的打包缓存。