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
与多个容器共享的docker映像上的配置文件_Docker - Fatal编程技术网

与多个容器共享的docker映像上的配置文件

与多个容器共享的docker映像上的配置文件,docker,Docker,我使用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/opc

我使用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"
它可以工作,但强制我为应用程序的每个实例都提供两个文件的副本。当我想要进行更改时,我需要将它们复制到每个实例

我希望有一种简单、可移植、可复制的方式,将这些定制放置在这些容器的多个实例上

我读过,我现在做的基本上是他们的选择(a),但它有我提到的所有缺点。我不能使用选项(b),因为我使用的映像不支持-至少不支持我需要的所有自定义配置;而对于选项(c),我需要为我们使用的每个图像的每个版本/标签创建一个自定义派生图像

我尝试的是创建一个只包含配置文件的映像,并将其添加为卷。如果卷是一个文件夹,它可以工作,但是它会“覆盖”原始文件夹,并且只有这两个自定义文件存在,而我需要文件夹上的其他原始文件也存在

如果我尝试将单个文件用作卷,它将不起作用

我想我可以把一个卷中的所有文件放在一个新的映像中,然后在每个文件的容器上创建符号链接。但我不确定如何在容器上创建这些符号链接


也许有更好的方法继续,但不幸的是我被卡住了。

也许你应该尝试利用:根据你的描述,我认为这将有助于你前进

您可以在单个“节点”(您的本地计算机)上使用swarm,并继续使用撰写文件。使用:
docker swarm init
开始

禁用opcache.ini
文件添加到服务中,如下所示:

docker config create dopcache disable-opcache.ini
然后使用类似的方法将配置传递给容器:

docker service create \
   --name myphpapp \
   --config source=dopcache,target=/usr/local/etc/php/conf.d/opcache-recommended.ini,mode=0440 \
   -c my-docker-compose.yml \
   myphpimage:latest \

我并没有把这个作为答案,因为你说你没有考虑swarm。但是,您可以在本地使用swarm,而不使用集群(使用:
docker swarm init
),该集群仍然可以读取您的合成文件,然后您可以使用创建的“configs”功能来解决您的确切问题:@EngineerDollery我不知道此功能。或者,您可以在swarm中运行单个“节点”。这似乎确实是最优雅、最合乎逻辑的方法。请写一个anwser,我会接受的。如果你把每个实例都挂载到一个文件上,它会工作吗?听起来很有希望,我会试试,然后回来接受答案。谢谢!:-)