通过docker-compose运行几个应用程序
我们正试图通过docker-compose
运行两个应用程序。 这些应用程序(显然)在单独的文件夹中,每个都有自己docker-compose.yml
。 在文件系统上看起来像这样:
dir/app1/ -... -docker-compose.yml dir/app2/ -... -docker-compose.yml
现在我们需要一种方式来组合这些人,因为他们通过http进行了一些基本的整合。
默认docker-compose
行为的问题是,如果所有的相对path相对于它正在运行的文件夹。 所以,如果你从上面的例子中转到dir
并运行
docker-compose up -f app1/docker-compose.yml -f app2/docker-compose.yml
如果任何docker-compose.yml
使用相对path来设置env文件或其他任何东西的话,那么你最终会走运。
下面是实际工作方式的列表,但有其缺点 :
- 分别运行这些应用程序,并使用networking。
在多个docker-compose项目之间的沟通中对此进行了充分的描述
我已经testing过,现在就起作用了。 缺点:
-
你不得不在
docker-compose.yml
提到networking,并在docker-compose.yml
将其推送到存储库,从而在没有发布networking的应用程序的情况下使整个应用程序无法运行。 -
你必须想出一些聪明的方法让这些应用程序实际上等待对方
2使用绝对path。 那么,这是不好的,不需要任何阐述。
3将你需要的端口暴露在主机上,让他们与主机交谈,而不必知道彼此的事情。 这太明显了,呃。
所以,问题是:如何用docker-compose
来pipe理任务?
感谢大家的反馈。 在我们的团队中,我们已经同意以下解决scheme:
使用networking和覆盖
长话短说,你原来docker-compose.yml
不应该改变一下。 所有你需要做的就是在它附近build立docker-compose.override.yml
,它发布networking并把你的服务挂接到它。
所以,谁想要有一个独立的应用程序运行
docker-compose -f docker-compose.yml up
但是当你需要并行运行应用程序并相互通信时,你应该去做
docker-compose -f docker-compose.yml -f docker-compose.override.yml up