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

How to connect docker containers in separate deployments on the same host machine using docker-compose?

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

比方说,我在 部署 A 中有一组容器:

root@debussy:~# docker ps | awk '{print }' | 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 }' | grep "stockagents"
stockagents-app:latest

是否可以通过 deployment-b.yml and/or deployment-a.yml 中的某些特定配置从 stockagents-app 访问数据库(cl-db 容器)?

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

您的需求似乎超出了 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 访问。

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

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