【发布时间】:2021-12-21 06:31:50
【问题描述】:
我有一个 laravel 应用程序(基于 laradock),它经过修改以将其生产化。
我正在尝试构建一个解决方案,其中:
- 文件从主机复制到 php 应用程序到一个卷。正如您在此处的 docker 文件中所见,这些文件已复制到映像中:image file copy,并且 composer update 正在按预期运行。 composer update
- php app内置于docker(composer update命令需要在volume上运行)
- 调用docker-compose up时,多个容器启动,nginx和php-fpm共享相同的内容。 Nginx 容器因此可以服务于 php 应用程序。
当我在上面的 repo 中运行代码时,我在浏览器中看到 404。原因是(我认为)因为在 docker-compose 文件的第 97 行,声明:
- app-data:/var/www/
(挂载卷),已删除已在挂载时添加的文件。 (这些文件作为 docker build php-fpm 的一部分被正确添加到图像中。)。
所以,问题是,我怎样才能在运行时挂载一个卷,而不是删除作为映像构建的一部分添加的文件?需要将卷添加到该路径,以便两个容器都可以看到文件 (AFAIK)。
【问题讨论】:
-
通常的答案是将数据放在与应用程序代码不同的目录中,并仅在数据目录上安装卷。您通常不应该在应用程序代码上挂载卷或主机目录;使用 Docker 映像中内置的代码。
-
(最好还是完全不在容器之间共享文件,让一个容器通过 HTTP 接口或类似的东西向另一个容器发送数据。这在 Kubernetes 等分布式环境中效果更好,但您的应用程序可能会发生重大变化。)
-
感谢大卫。我对第二种方法感兴趣。您可以将我链接到我如何实现这一点的任何示例?也许请添加一个答案,我会接受。谢谢
标签: php laravel docker docker-compose docker-volume