如何使用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
守护进程并启动SkyDNS
和SkyDock
。 如果你熟悉俄语,你可以在这里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
提供。