5

我很难弄清楚如何互连属于在同一主机上运行的不同 docker-compose 项目的容器。

假设我在Deployment 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。现在,我们还有一个不同的Deployment B,它有自己的 `deployment-b.yml:

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

是否可以通过和/或中的某些特定配置访问数据库(cl-db容器)?stockagents-appdeployment-b.ymldeployment-a.yml

注意:我知道如何使用纯docker命令和通过链接容器来做到这一点--link,但是有没有一种方法可以仅使用 docker-compose及其配置文件来实现相同的行为?

4

2 回答 2

2

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

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

于 2015-12-22T16:44:59.993 回答
0

似乎您的需求超过了 docker-compose 的机会。您需要弄乱编排工具(或多或少复杂)。我们也使用 Ubuntu,对于我们的环境SkyDNS+SkyDock似乎是一个很好且简单的解决方案(当然etcd不需要)。部署包括三个步骤:您只需要拉取镜像、重新配置 docker daemon 和SkyDNS启动SkyDock. 如果您熟悉俄语,可以在此处找到不错的部署指南。

该解决方案的主要优点是在 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在任何容器内按名称提供。

于 2015-04-17T22:24:59.100 回答