gpt4 book ai didi

docker - 如何使尚未启动的容器的 DNS 条目在另一个容器中可用?

转载 作者:行者123 更新时间:2023-12-02 20:15:46 25 4
gpt4 key购买 nike

我正在尝试运行一个容器集群。每个实例都通过环境变量获得其他实例的主机和端口列表。
我想使用 docker 网络(即,不是主机网络)。我的想法是使用“--name”(或--network-alias)运行选项为每个实例提供一个明确的主机名。

所以我想这样开始他们:

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 的容器时,这些主机名还没有通过 Docker 网络 DNS 存在。我的服务器启动,查找失败,然后服务器再次退出(不,我无法更改代码以重试 DNS 查找)。
请注意,如果其他实例尚无法访问,则服务器不会失败……只是它不能容忍 DNS 查找失败。

知道如何使主机名 x2 和 x3 可用于容器 x1(以及主机名 x3 可用于容器 x2)吗?

我尝试使用“--add-host”选项向/etc/hosts 文件添加一个虚假条目,但当然这个虚假条目将“隐藏”DNS 查找,服务器甚至永远不会看到正确的 IP 地址一旦其他实例启动。

除了使用主机网络之外,还有什么方法可以完成这项工作?

我根据 BMitch 的建议提出的解决方案是采用 wait-for-it 脚本,稍微调整一下,这样它就不会“ping”主机 + 端口,而是只对给定的主机进行 DNS 查找。

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

最佳答案

我会在图像中更改或添加一个入口点,类似于 wait-for-it .然后,您可以按任何顺序启动容器,而无需担心竞争条件或为尚不存在的容器注入(inject) DNS 地址。

关于docker - 如何使尚未启动的容器的 DNS 条目在另一个容器中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43490506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com