我很难弄清楚如何互连属于同一主机上运行的不同docker-compose项目的容器。
我们说,我在部署A 中有一组容器:
root@debussy:~# docker ps | awk '{print $2}' | grep "cl"
cl-worker:latest
cl-nginx:latest
cl-app:latest
cl-rabbitmq:latest
cl-memcached:latest
cl-db:latest
所有这些容器都是从单独的配置文件deployment-a.yml
启动的。现在,我们还有一个不同的部署B ,它有自己的`deployment-b.yml:
root@debussy:~# docker ps | awk '{print $2}' | grep "stockagents"
stockagents-app:latest
是否可以通过cl-db
和/或stockagents-app
中的某些特定配置从deployment-b.yml
访问数据库(deployment-a.yml
容器)?
注意:我知道如何使用纯docker
命令并通过--link
链接容器,但是有一种方法可以仅使用{{来实现相同的行为1}}及其配置文件?
答案 0 :(得分:2)
最近版本的docker-compose
(至少1.5.2)支持docker-compose.yml
文件中的"external_links" option,它允许指定在当前配置之外启动的容器。
这正是我在尝试在单独部署中的容器之间共享公共服务(例如MySQL)时所寻找的功能。
答案 1 :(得分:0)
好像你的需求已经超过了docker-compose的机会。你需要搞乱编排工具(或多或少复杂)。我们也使用Ubuntu,对于我们的环境SkyDNS
+ SkyDock
似乎是一个很好的简单解决方案(当然不需要etcd
)。部署包括三个步骤:您只需要提取图像,重新配置docker守护程序并启动SkyDNS
和SkyDock
。如果您熟悉俄语,可以找到很好的部署指南here。
此解决方案的主要优点是Docker环境中可用的新DNS区域。容器可以通过名称相互调用。但由于SkyDNS
中缺少反向查找,因此您需要明确传递主机名:
web:
image: django
hostname: web.django.dev.skydns.local
build: ./webapp
ports:
- "8000:8000"
environment:
- DEBUG=true
- SEND_EMAILS=false
以这种方式,您的容器将从任何容器内部以名称web.django.dev.skydns.local
提供。