如何使用docker-compose在同一台主机上的独立部署中连接docker容器?

时间:2015-04-17 12:11:05

标签: docker docker-compose

我很难弄清楚如何互连属于同一主机上运行的不同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}}及其配置文件?

2 个答案:

答案 0 :(得分:2)

最近版本的docker-compose(至少1.5.2)支持docker-compose.yml文件中的"external_links" option,它允许指定在当前配置之外启动的容器。

这正是我在尝试在单独部署中的容器之间共享公共服务(例如MySQL)时所寻找的功能。

答案 1 :(得分:0)

好像你的需求已经超过了docker-compose的机会。你需要搞乱编排工具(或多或少复杂)。我们也使用Ubuntu,对于我们的环境SkyDNS + SkyDock似乎是一个很好的简单解决方案(当然不需要etcd)。部署包括三个步骤:您只需要提取图像,重新配置docker守护程序并启动SkyDNSSkyDock。如果您熟悉俄语,可以找到很好的部署指南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提供。