Dockernetworking – 链接或不链接?

我们有1000个pythonunit testing,并且有效地运行它们,我们将它们分批进行并行化。 每个批处理都有自己的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

连接string是“mongodb:// db:27017 / mydb”

{%}是与环境相关的数字 – 所以在ut_network-1上,数据库将是mongo-unittest-1。 注意“db”的别名。

这工作正常,但我读了 – 链接将被弃用 。

我认为解决scheme就像删除 – 链接和设置主机名一样简单:

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

但是,如果我这样做,那么应用程序无法findmongo实例。 进一步:

  • 我不能使用--name db因为Docker会尝试创build多个名为“db”的容器,这显然不能做(即使它们位于不同的networking上)。
  • mongo数据库的默认主机名是容器ID的前几位。 我的unit testing都从一个秘密文件中获取mongo数据库string,该文件假定数据库被称为“db”。
  • 正如我所说,如果我使用 – --hostname db的核心应用程序无法findmongo实例。 但是,如果我将容器ID硬编码为服务器,那么核心应用程序会发现mongo实例正常。
  • 我想保留别名'db',所以unit testing可以使用mongo数据库string的一个单一来源,我不需要混淆。

这里的文档意味着我可以使用 – 链接。

那么我正确地做这个? 或者,如果没有,我应该如何configurationDockernetworking,使我可以创build多个networking,并为'db'别名'静态'主机名?

任何意见将不胜感激。

提前致谢!

是的,链接被弃用,应该避免。 对于DNS发现,我认为主机名可以正常工作,但是我看到了相同的结果。 您可以使用容器名称与 – 具有独特的容器问题的名称--name db ,所以我build议你反对,因为你已经find相同的原因。 最好的解决scheme是直接去networking别名的目标--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