如何在使用docker-compose scale命令后,通过主机名访问额外的容器?

21

我正在使用docker-compose 1.6和docker 1.10.1以及docker-compose.yml的第2版本。

Compose中的网络所述,在docker-compose up后,会创建新的网络并将所有容器分配到其中的主机名。

docker-compose scale <component>=2之后,如何通过主机名访问其他(即扩展的)容器?


已在https://dev59.com/4lkS5IYBdhLWcg3we26Z#39895650回答。 - luckydonald
3个回答

9
使用“scale”时,内部Docker DNS服务仅解析完整名称,例如projectname_db_1、projectname_db_2等。当然,最好还提供解析服务名称+索引而无需项目名称前缀。

这对我来说是有效的,截至docker-compose版本1.17.1。 - bcattle

6

根据我看到的例子,假设你的容器名称是db,那么扩展的容器名称为db_1db_2等等...


1
使用像nginx这样预定义配置的工具,该如何运作呢?我是否需要使用Docker事件来扫描新主机并更新后端列表?(类似于interlock的工作方式) - tpbowden
我尝试使用容器名称,但似乎它们没有被填充到DNS中。 - Max Romanovsky
@tpbowden 一种方法是编辑nginx配置文件,添加额外的容器后重新启动nginx。使用像https://github.com/docker/dockercloud-haproxy这样的项目可以实现负载均衡器的自动扩展,但似乎这些项目通过将docker守护进程套接字绑定到容器中来工作。 - bonh

2
我基于Python和Docker API回答了那个问题。
你可以使用 Docker API,找出你的项目名称和服务名称。
然后,你可以过滤所有具有相同项目+服务的可用容器,以获取其他实例。
通过查找数字,最终可以构建主机名。
参见如何在Compose集群中获取关于我们自己的信息(备份在gist.github.com)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接