如何将文件复制到Docker容器中的主机安装目录

时间:2019-04-15 10:15:23

标签: docker jenkins dockerfile

我正在尝试将配置文件复制到具有主机安装目录的jenkins / jenkins映像。 我的Dockerfile的一部分:

FROM jenkins/jenkins
COPY file.txt /var/jenkins_home/

试图使用这样的音量:

-v volume_name:/var/jenkins_home

在这种情况下,我确实在jenkins中看到“ file.txt”,但是如果我使用:

-v /folder:/var/jenkins_home

我根本看不到jenkins中的file.txt。所以我在这里想念什么?

2 个答案:

答案 0 :(得分:1)

每个问题:

  

...如果我使用的话

-v /folder:/var/jenkins_home
     

我根本看不到jenkins中的file.txt。所以我在这里想念什么?

主机卷(由于其基础实现而有时被称为绑定安装)不会从映像内容初始化该卷。仅命名卷提供来自docker引擎的初始化支持。但是,可以使用不同的语法对绑定安装执行命名卷。以下是执行此操作的几种不同方式的示例:

  # create the volume in advance
  $ docker volume create --driver local \
      --opt type=none \
      --opt device=/home/user/test \
      --opt o=bind \
      test_vol

  # create on the fly with --mount
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
    foo

  # inside a docker-compose file
  ...
  volumes:
    bind-test:
      driver: local
      driver_opts:
        type: none
        o: bind
        device: /home/user/test
  ...

您可以这样做:

docker run -it --rm \
  --mount type=volume,dst=/var/jenkins_home,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/folder \
  ...

回答您实际要执行的操作:

也就是说,Jenkins映像在/ var / jenkins_home定义了一个卷,这阻止了您使用更改该文件夹的RUN命令扩展该映像的能力。 COPY和ADD恰好起作用,因为它们没有创建临时容器。解决方法是,Jenkins开发人员使用映像内的/usr/share/jenkins/ref/作为初始化/ var / jenkins_home目录的源。因此,您的Dockerfile应该改为在其中复制所需的文件:

FROM jenkins/jenkins
COPY file.txt /usr/share/jenkins/ref/

答案 1 :(得分:0)

欢迎来到。

在第一种情况下,您要告诉docker创建一个Volume(https://docs.docker.com/storage/volumes/)并将其安装在/var/jenkins_home上, docker使用docker映像中已经存在的数据预填充卷。如果该卷已经存在,它将重新使用它。

您可以通过执行以下操作来检查您的卷:

docker volume ls

在第二种情况下,由于将主机(本地计算机/ vm)中的目录绑定(https://docs.docker.com/storage/bind-mounts/)绑定到容器,因此看不到文件。您在/var/jenkins_home下看到的所有文件都将与主机目录/folder中的文件相同。

这会在运行时(创建容器时)发生,如果您想在Docker映像中包含一些默认文件,则可以在构建时通过使用COPYADD指令来执行此操作,就像您一样这样做时,这些文件将在构建时复制到映像中。但是,如果在运行时指定目录或文件的绑定装载,则基本上是在替换它们。