Docker Networking - 要链接还是不链接?

时间:2017-08-01 00:43:04

标签: docker docker-networking docker-link

我们有1000个python单元测试并且为了有效地运行它们,我们分批并行化它们。每个批处理都有自己的Docker环境,包括核心应用程序和mongo实例。它设置如下:

docker network create --driver bridge ut_network-1

docker network create --driver bridge ut_network-2

docker run -d --name mongo-unittest-1 --network ut_network-1 mongo:3.4.2

docker run -d --name mongo-unittest-2 --network ut_network-1 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} --link mongo-unittest-{%}:db python discover.py

连接字符串是" mongodb:// db:27017 / mydb"

{%}是与环境关联的数字 - 所以在ut_network-1上,数据库将是mongo-unittest-1。请注意' db'。

的别名

这很好但我读了--link will be deprecated

我认为解决方案就像删除--link并设置主机名一样简单:

docker run -d --hostname db --network ut_network-1 mongo:3.4.2

docker run -d --hostname db --network ut_network-2 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} python discover.py

但是,如果我这样做,那么应用程序找不到mongo实例。进一步:

  • 我无法使用--name db,因为Docker会尝试创建多个名为“db' db”的容器。它显然不能做(即使它们在不同的网络上)。
  • mongo数据库的默认主机名是容器ID的前几位数字。我的单元测试都从一个秘密文件中获取mongo数据库字符串,该文件假设数据库被调用' db'。
  • 正如我所说,如果我使用--hostname db核心应用程序找不到mongo实例。但是,如果我将容器ID硬编码为服务器,那么核心应用程序会发现mongo实例很好。
  • 我想保留别名' db'所以单元测试可以使用一个单独的源代码来实现我不需要捣乱的mongo数据库字符串。

The documentation here暗示我可以使用--link。

我正确地这样做了吗?或者如果没有,我应该如何配置Docker网络,以便我可以创建多个网络并为“静态”设置别名。 ' db'?

的主机名

非常感谢任何建议。

提前致谢!

1 个答案:

答案 0 :(得分:1)

是的,链接已被弃用,应避免使用。对于DNS发现,我认为主机名可行,但我看到的结果与您看到的相同。您可以将容器名称与--name db一起使用,该容器名称具有唯一的容器问题,因此我建议您使用与您找到的相同的原因。最好的解决方案是直接使用--network-alias db

来实现网络别名的目标
docker run -d --network-alias db --network ut_network-1 mongo:3.4.2

docker run -d --network-alias db --network ut_network-2 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} python discover.py