在构建期间将主机文件复制到Docker容器

时间:2019-03-26 00:47:29

标签: docker

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

例如添加此行失败:

<?php
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
function my_theme_enqueue_styles() {

    $parent_style = 'parent-style'; // This is 'twentysixteen-style' for the Twenty Sixteen theme.

    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array( $parent_style ),
        wp_get_theme()->get('Version')
    );
}
?>

因为docker试图从/ var / lib / docker / tmp / docker-xxxxx路径进行复制。

当COPY命令甚至无法正确访问主机目录结构时,它应该从主机复制到容器的用途是什么?

2 个答案:

答案 0 :(得分:0)

COPY用于将文件从主机复制到Docker映像。

不要复制到它没有访问权限的“ root”文件夹。如果使用根目录或系统文件夹,则需要添加命令以获得写许可权。

尝试更改为“ tmp”文件夹,然后查看。 “ tmp”具有写许可权。

复制/ home / my_name / file_I_want / tmp

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

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

答案 1 :(得分:0)

COPY命令不会从主机复制到容器,而是从构建上下文复制到新的图像层。如您所见,两者之间有很大差异。

build命令与其他docker命令一样,都是基于客户端/服务器的。该构建可以在无法访问运行docker命令的机器的远程服务器上运行。为了支持将文件复制到映像中,您将构建上下文作为最后一个参数传递给构建命令。该上下文通常为.,指示当前目录。它可以很容易地是任何目录。您可以使用.dockerignore文件进一步更改该上下文中包含的内容。从客户端进行构建的第一步是将上下文打包,并将其发送到在临时位置解压缩的服务器。为避免无限循环(将temp目录发送到在该temp目录的子目录中解压缩的服务器,重复进行直到您用完磁盘空间)并且通常缓慢构建,您应该通过仅发送所需的目录来最小化此上下文来构建您的应用程序。

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

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