【发布时间】:2019-04-05 08:21:56
【问题描述】:
我使用 Docker 运行 PHP 软件的不同实例。每个实例都有自己的数据库容器、应用程序容器、docker-compose 文件等(没有 swarm、kubernetes 或任何类型的编排)。
我必须在 /usr/local/etc/php/conf.d/ 上包含一些自定义设置。我需要更改一个文件的内容,并添加另一个文件。
这就是我目前在 docker-compose 上实现这一目标的方式:
volumes:
- "./conf/disable-opcache.ini:/usr/local/etc/php/conf.d/opcache-recommended.ini:z"
- "./conf/custom.ini:/usr/local/etc/php/conf.d/custom.ini:z"
它有效,但迫使我为应用程序的每个实例都拥有这两个文件的副本。当我想进行更改时,我需要将它们复制到每个实例。
我希望以一种简单、便携、可复制的方式将这些自定义项放置在这些容器的多个实例上。
我已经阅读了this answer,我目前所做的基本上是他们的选项 (a),但它具有我提到的所有缺点。我不能使用选项 (b),因为我使用的图像不支持 - 至少不支持我需要的所有自定义配置;而对于选项 (c),我需要为我们使用的每个图像的每个版本/标签创建一个自定义派生图像。
我尝试的是创建一个仅包含配置文件的映像,并将其添加为一个卷。如果该卷是一个文件夹,它可以工作,但是它会“覆盖”原始文件夹并且只存在这两个自定义文件,而我需要文件夹中的其他原始文件也存在。
如果我尝试将单个文件用作卷,它将不起作用。
我想我可以将所有文件放在一个卷中的一个新图像中,然后在容器上创建指向每个文件的符号链接。但我不确定如何在容器上创建这些符号链接。
可能有更好的方法可以继续,但不幸的是我被卡住了。
【问题讨论】:
-
我没有添加这个作为答案,因为你说你没有考虑 swarm。但是,您可以在本地使用 swarm,无需集群(使用:
docker swarm init),它仍然可以读取您的撰写文件,然后您可以使用为解决您的确切问题而创建的“配置”功能:docs.docker.com/engine/swarm/configs -
@EngineerDollery 我不知道这个功能。或者您可以在 swarm 中运行单个“节点”。这似乎确实是最优雅和合乎逻辑的方法。请做写一个anwser,我会接受的。
-
如果你将每个实例都挂载在一个文件上,它不会起作用?
标签: docker