在生成期间将主机文件复制到docker容器

在生成期间将主机文件复制到docker容器,docker,Docker,是否有一种方法可以在构建过程中将主机文件复制到docker容器中,即docker build-t 例如,添加此行失败: COPY /home/my_name/file_I_want /root 因为docker正在尝试从/var/lib/docker/tmp/docker-xxxxx路径进行复制 当复制命令甚至不能正确访问主机目录结构时,它应该从主机复制到容器,它有什么用?复制是将文件从主机复制到docker映像 不要复制到它无权访问的根文件夹。如果使用根目录或系统文件夹,则需要添加写入权限命

是否有一种方法可以在构建过程中将主机文件复制到docker容器中,即docker build-t

例如,添加此行失败:

COPY /home/my_name/file_I_want /root
因为docker正在尝试从/var/lib/docker/tmp/docker-xxxxx路径进行复制


当复制命令甚至不能正确访问主机目录结构时,它应该从主机复制到容器,它有什么用?

复制是将文件从主机复制到docker映像

不要复制到它无权访问的根文件夹。如果使用根目录或系统文件夹,则需要添加写入权限命令

尝试更改到tmp文件夹并查看。tmp具有写入权限

复制/home/my_name/file_I_want/tmp

您可以创建文件夹,也需要授予访问权限

关于道路,是的,我也面临同样的问题。它采用相对路径。

复制命令不会从主机复制到容器,而是从构建上下文复制到新的图像层。正如你所看到的,两者之间有很大的区别

build命令与其他docker命令一样,是基于客户机/服务器的。构建可以在远程服务器上运行,而无法访问运行docker命令的计算机。要支持将文件复制到图像中,请将生成上下文作为最后一个参数传递给build命令。这种情况经常发生。指示当前目录。它可以是任何目录。您可以使用.dockrignore文件进一步更改该上下文中包含的内容。从客户端构建的第一步是对上下文进行tar处理,并将其发送到服务器,服务器在临时位置解包。为了避免无限循环将临时目录发送到服务器(该服务器解包在该临时目录的子目录中),在磁盘空间耗尽和构建速度减慢之前重复,您应该通过只发送构建应用程序所需的目录来最小化此上下文

在这里,图像和容器之间的区别就不那么重要了。容器是一个实例,通常运行时内部有一个独立的进程,基于图像的定义。将文件复制到图像中时,不必像通常使用RUN命令那样创建临时容器。Dockerfile中所有这些命令的最终结果都是一个新映像,您可以将其作为一个或多个容器运行,或者从注册表中进行推/拉操作


解决方案是将copy命令中的第一个目录作为构建上下文的一部分,通常与Dockerfile的目录相同,并从该相对路径复制。

您只能从包含docker文件的同一目录树(更具体地说,是docker build的path参数根目录树)中从主机复制文件。复制./file\u I\u want/rootMost基本Docker映像开始以root身份运行,因此权限问题通常不是问题。将二进制文件安装到Dockerfile中的系统目录(如/usr/bin)中非常常见,并且大大简化了操作。