docker工人:我如何为另一个容器中尚未启动的容器创buildDNS条目

我正在尝试运行一个容器集群。 每个实例都通过一个环境variables给出了其他实例的主机和端口的列表。 我想使用dockernetworking(即不主机联网)。 我的想法是给每个实例一个明确的主机名与“ – 名称”(或 – networking别名)运行选项,然后

所以我想像这样开始他们

docker run --name x1 -e clusterMembers=x2:12345,x3:12345 --network=mynet -d my/image docker run --name x2 -e clusterMembers=x1:12345,x3:12345 --network=mynet -d my/image docker run --name x3 -e clusterMembers=x1:12345,x2:12345 --network=mynet -d my/image 

问题是,当我启动引用主机名x2和x3的第一个容器时,这些主机名通过DockernetworkingDNS尚不存在。 我的服务器启动,查找,失败,服务器再次退出(不,我不能更改代码重试DNS查找:-()注意,如果其他实例不可达,服务器将不会失败。它只是它不能容忍一个失败的DNS查找。

任何想法如何使主机名x2和x3可用于容器x1(和主机名x3到容器x2)?

我尝试了“–add-host”选项来向/ etc / hosts文件中添加一个虚假条目,但是这个虚假条目当然会影响DNS查询,并且服务器永远也看不到正确的IP地址一旦其他实例启动。

任何方法来完成这个,除了使用主机networking?

谢谢

PalatinateJ

我根据BMitch的build议提出的解决scheme是采取等待脚本,稍微调整一下,这样就可以不用“ping”主机+端口,而只需要为给定主机进行DNS查找。

然后,在我的容器入口点脚本中,我首先从上面的示例中的“clusterMembers”环境variables中提取主机名,并使用每个主机名的wait-for-dns脚本。

我会改变或添加一个入口点在图像,做一些等待 。 然后,您可以按任意顺序启动容器,而无需担心竞争条件或为尚不存在的容器注入DNS地址。

我尝试了“–add-host”选项来向/ etc / hosts文件中添加一个虚假条目,但是这个虚假条目当然会影响DNS查询,并且服务器永远也看不到正确的IP地址一旦其他实例启动。

我build议你结合这种方法,为每个容器分配特定的IP地址:

docker run --name x1 --add-host="x2:172.17.42.102" --add-host="x3:172.17.42.103" --ip="172.17.42.101" --network=mynet -d my/image