Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将配置文件共享到多个docker容器_Linux_Docker - Fatal编程技术网

Linux 将配置文件共享到多个docker容器

Linux 将配置文件共享到多个docker容器,linux,docker,Linux,Docker,假设我的Docker主机上有以下配置文件,并且我希望多个Docker容器能够访问该文件 /opt/shared/config_file.yml 在典型的非Docker环境中,我可以使用符号链接,例如: /opt/app1/config_file.yml -> /opt/shared/config_file.yml /opt/app2/config_file.yml -> /opt/shared/config_file.yml 现在假设app1和app2已停靠。我希望能够在一个地方

假设我的Docker主机上有以下配置文件,并且我希望多个Docker容器能够访问该文件

/opt/shared/config_file.yml
在典型的非Docker环境中,我可以使用符号链接,例如:

/opt/app1/config_file.yml -> /opt/shared/config_file.yml
/opt/app2/config_file.yml -> /opt/shared/config_file.yml
现在假设app1和app2已停靠。我希望能够在一个地方更新config_file.yml,并让所有使用者(docker容器)接受此更改,而无需重建容器

我知道符号链接不能用于访问主机上docker容器外部的文件

首先想到的两个选项是:

  • 设置从docker主机到docker容器的NFS共享
  • 将配置文件放入共享Docker卷中,并使用Docker compose将app1和app2连接到共享配置Docker

  • 我正在尝试确定其他选项,然后最终决定最佳行动方案。

    主机装载的卷如何?如果每个应用程序只读取配置,并且要求它位于容器内的不同位置,则可以执行以下操作:

    docker run --name app1 --volume /opt/shared/config_file.yml:/opt/app1/config_file.yml:ro app1image
    docker run --name app2 --volume /opt/shared/config_file.yml:/opt/app2/config_file.yml:ro app2image
    

    主机上的文件可以装载在每个容器的单独位置。在Docker 1.9中,您实际上可以使用特定插件中的任意卷来保存数据(例如)。但是,这两种解决方案仍然是针对每台主机的,并且数据不能同时在多台主机上可用

    将文件装载为卷是您需要的(请参阅@AndyShinn的答案)。要将其扩展到多个容器,您是否考虑过运行一个配置存储,如concur或etcd?有兼容的模板引擎,可以使容器中的本地文件随配置更改保持最新。马克,谢谢你的建议。领事和etcd看起来都很有趣。我认为服务发现/分布式配置概念可以解决很多问题。这正是我的情况,尽管我需要在微服务之间共享一个“constant.js”文件。鉴于这个问题已经存在4年了,您是否找到了其他/更好的解决方案,或者您认为这仍然是相关的/推荐的?非常感谢。安迪,谢谢你的回答。这个解决方案有效。也感谢您推荐Flocker。我还在想docker的做事方式。您知道使用Swarm是否可以实现多主机解决方案吗?我目前使用NFS进行多主机文件共享。Swarm只是一个调度器,它并没有真正与NFS绑定。使用swarm,您仍然需要以某种方式引导NFS装载。我一直在关注存储解决方案。但我还没有看到任何关于多主机并发文件装载的方法。目前,它们主要用于持久性和在主机之间移动的能力(move是关键字)。