如何在Docker构建期间挂载共享卷?

时间:2019-06-15 19:20:07

标签: docker dockerfile

我正在尝试使用docker,使用区域文件的共享卷构建dockerbind9

我想在docker中使用centos构建bind9。在Dockerfile中,我安装了bind,并在安装过程中使用一些文件创建了/ var / named,但是当我使用/ var / named上的共享卷启动容器时(在该容器上我具有区域文件),/ var / named中的原始文件就消失了

FROM centos
RUN yum -y install bind -> after that, there are files in /var/named

但是当我使用以下方法启动容器时:

-v /path/to/zonefiles/folder:/var/named

容器无法启动,因为/ var / named中的原始文件已丢失 有什么建议如何克服这个问题?也许可以在“ docker build”期间使用共享卷?

2 个答案:

答案 0 :(得分:0)

我对Bind9不熟悉,但是-v /path/to/zonefiles/folder:/var/named参数在运行时在容器中的/ var / named处挂载了一个卷,以代替映像上的任何内容。在运行时将文件放在/ var / named中的唯一方法是,如果这些文件恰巧在运行时位于主机的/ path / to / zonefiles中。

您可能应该考虑将文件挂载到与/ var / named不同的位置。 -v /path/to/zonefiles/folder:/var/namedSomethingElse

答案 1 :(得分:0)

我假设您正在尝试将主机上/path/to/zonefiles/folder中的本地文件添加到bind/var/named生成的文件中。我能看到的唯一方法是自己合并文件夹。

如您所见,卷挂载将在挂载点覆盖文件系统。为了实现所需的功能,必须在创建新安装之前在安装点复制文件,并将它们与本地文件合并,以便在卷安装后它们仍然存在。

以下过程应完成此操作:

docker build -t bind .
docker run -d --name bind bind
docker cp bind:/var/named /path/to/zonefiles/folder
docker stop bind && docker rm bind
docker run -d --name bind -v /path/to/zonefiles/folder:/var/named bind

说明:

  1. 第一行将建立您的图片
  2. 第二行将运行一个容器,以便您可以从中复制文件
  3. 第三行会将生成的文件复制到您的主机文件夹
  4. 第四行将停止并移除容器
  5. 第五行使用合并的配置文件文件夹运行容器

我相信这将完成您想要的行为。