有没有办法使用 DNS 发现 docker 网络上的其他容器?
Is there a way to discover other containers on a docker network using DNS?
我希望能够从 docker 容器中获取同一 docker 网络上所有容器 运行 的列表。由于内置 docker DNS 可以给我 IP 地址,如果我有主机名,它似乎应该能够给我一个主机名列表(也许 DNS 不能这样做,我不知道) .
我想到的获取容器列表的其他方法:
- 绑定将 docker 套接字装入容器并使用
docker ps
。就安全性而言,这不是一个好主意。
- 使用
--link
,我相信它会将条目放在 /etc/hosts
中。然后我可以从那里读取它们,但是这种做法违背了目的,因为我在启动容器时必须已经知道主机名。
我希望避免使用外部服务发现机制,但对于如何获取容器列表的所有建议,我将不胜感激。
实现此目的的一种简单方法是 运行 主机中的一个或多个 docker 命令,以循环获取您需要的信息并将其存储在已知的位置(例如 bash)
while true; do echo `docker ps --format {{.ID}}` > /SOME/KNOWN/FILE; sleep 5; done
然后让容器使用卷访问此文件。
它比提供对 docker 套接字的访问安全得多,您可以改进它以提供您需要的所有信息(例如 json with name, ip, 运行时间等)。
我希望能够从 docker 容器中获取同一 docker 网络上所有容器 运行 的列表。由于内置 docker DNS 可以给我 IP 地址,如果我有主机名,它似乎应该能够给我一个主机名列表(也许 DNS 不能这样做,我不知道) .
我想到的获取容器列表的其他方法:
- 绑定将 docker 套接字装入容器并使用
docker ps
。就安全性而言,这不是一个好主意。 - 使用
--link
,我相信它会将条目放在/etc/hosts
中。然后我可以从那里读取它们,但是这种做法违背了目的,因为我在启动容器时必须已经知道主机名。
我希望避免使用外部服务发现机制,但对于如何获取容器列表的所有建议,我将不胜感激。
实现此目的的一种简单方法是 运行 主机中的一个或多个 docker 命令,以循环获取您需要的信息并将其存储在已知的位置(例如 bash)
while true; do echo `docker ps --format {{.ID}}` > /SOME/KNOWN/FILE; sleep 5; done
然后让容器使用卷访问此文件。
它比提供对 docker 套接字的访问安全得多,您可以改进它以提供您需要的所有信息(例如 json with name, ip, 运行时间等)。