如何在Docker中将主机文件夹与容器文件夹合并?

时间:2015-01-15 09:02:01

标签: docker

我在Docker上运行维基媒体。维基媒体的扩展名位于extensions/文件夹中,该文件夹最初包含内置扩展名(一个扩展名=一个子文件夹)

现在我想添加新的扩展程序。但是,我不喜欢修改Dockerfile或在现有容器上创建新提交的选项。

是否可以在主机中创建一个文件夹(例如/home/admin/wikimedia/extensions/),该文件夹将与容器中的extension文件夹合并(而不是覆盖)?因此,每当我想安装新扩展程序时,我只需将扩展程序文件夹复制到主机/home/admin/wikimedia/extensions/

即可

1 个答案:

答案 0 :(得分:9)

您可以将卷从主机安装到扩展文件夹以外的其他位置,然后在启动脚本中,您可以将内容复制到容器的目录中。您需要重建一次主机。

例如:

Dockerfile:
  RUN cp startup-script /usr/local/bin/startup-script
  CMD /usr/local/bin/startup-script

startup-script:
   #!/bin/bash
   cp /mnt/extensions /path/to/wikipedia/extensions
   /path/to/old-startup-script $@

docker run -d -v /home/admin/wikimedia/extensions:/mnt/extensions wikipedia

这是解决此问题的一种方法,另一种方法是为扩展维护一个单独的数据容器,然后您将挂载它并将其维护在维基百科容器之外。它必须包含所有扩展名。

你可以这样开始:

 docker run -d -v /home/admin/wikimedia/extensions:/path/to/wikipedia/extensions --name extensions busybox tail -f /dev/null
 docker run -d --volumes-from extensions wikipedia