如何使用 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 守护程序并启动 SkyDNS
和 SkyDock
。如果您熟悉俄语,您可以找到不错的部署指南 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)时寻找的功能。
我很难弄清楚如何在同一主机上互连属于不同 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 守护程序并启动 SkyDNS
和 SkyDock
。如果您熟悉俄语,您可以找到不错的部署指南 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)时寻找的功能。