我们正尝试通过docker-compose
运行两个应用。这些应用程序(显然)位于不同的文件夹中,每个文件夹都有自己的docker-compose.yml
。在文件系统上它看起来像这样:
dir/app1/
-...
-docker-compose.yml
dir/app2/
-...
-docker-compose.yml
现在我们需要一种方法来组合这些人,因为他们通过http进行了一些细节的整合。
默认docker-compose
行为的问题是,如果处理与正在运行的文件夹相关的所有相对路径。因此,如果您从上面的示例转到dir
并运行
docker-compose up -f app1/docker-compose.yml -f app2/docker-compose.yml
如果你docker-compose.yml
中的任何一个使用env文件的相对路径或其他任何内容,那么你最终会失去运气。
以下是实际工作方式的列表,但有其缺点:
完整地描述了Communication between multiple docker-compose projects
我刚刚测试过,它确实有效。缺点:
您必须在docker-compose.yml
中提及网络,并在某天将其推送到存储库,使整个应用程序无法运行,而无需发布网络的应用程序。
你必须想出一些聪明的方法让这些应用实际上彼此等待
2使用绝对路径。嗯,这很糟糕,不需要任何详细说明。
3在主机上公开您需要的端口,让它们与主机通话,而不必了解彼此之间的事情。显然,那也许。
所以,问题是:如何使用docker-compose
来管理任务?
答案 0 :(得分:0)
感谢大家的反馈意见。在我们的团队中,我们同意以下解决方案:
使用网络&覆盖强>
长话短说,原来的docker-compose.yml
不应该有所改变。您所要做的就是在它附近设置docker-compose.override.yml
,它会发布网络并将您的服务挂钩到其中。
所以,谁想要一个独立的应用程序运行
docker-compose -f docker-compose.yml up
但是当你需要并排运行应用程序并相互通信时,你应该使用
docker-compose -f docker-compose.yml -f docker-compose.override.yml up