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

我很难搞清楚如何互连属于同一个主机上运行的不同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 

从单独的configuration文件deployment-a.yml启动的所有这些容器。 现在,我们也有一个不同的部署B ,它有自己的`deployment-b.yml:

 root@debussy:~# docker ps | awk '{print $2}' | grep "stockagents" stockagents-app:latest 

是否有可能通过deployment-b.yml和/或deployment-a.yml的某些特定configuration从stockagents-app访问Database( cl-db容器)?

注:我知道如何使用纯docker命令和通过链接链接容器,但有没有一种方法来实现相同的行为,只使用docker-compose及其configuration文件?

docker-compose (1.5.2以上版本)的最新版本似乎支持docker-compose.yml文件中的“external_links”选项 ,允许指定在当前configuration之外启动的容器。

这正是我试图在不同部署中的容器之间共享公共服务(例如MySQL)时所要寻找的function。

似乎你的要求超出了docker撰写的机会。 你需要搞乱编排工具(或多或less的复杂)。 我们也使用Ubuntu,并为我们的环境SkyDNS + SkyDock似乎是一个很好的和简单的解决scheme(当然没有etcd需要)。 部署包括三个步骤:您只需要拉取图像,重新configurationSkyDNS守护进程并启动SkyDNSSkyDock 。 如果你熟悉俄语,你可以在这里find很好的部署指南。

此解决scheme的主要优势是在Docker环境中提供新的DNS区域。 容器可以通过名字相互呼叫。 但是由于SkyDNS没有反向查询, 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提供。