gpt4 book ai didi

linux - 使用容器名称从主机操作系统解析 docker 容器 IP

转载 作者:行者123 更新时间:2023-12-02 19:49:03 26 4
gpt4 key购买 nike

我有一个非容器化的 nginx 实例,用作容器化和非容器化服务的反向代理。

由于容器 IP 可以在重启时更改,我不想在 nginx 配置文件中使用它们。我一直在寻找一种引用容器的简单方法。Docker 容器可以通过容器名称相互引用,即容器名称的 DNS 查找给出容器的 IP。我一直在寻找类似的东西,但名称应该可以从主机操作系统中解析。

约束:

解决方案应适用于现有容器。所以没有 docker run ... 命令

我试过 mageddo/dns-proxy-server。它应该解析容器名称,但即使在设置了正确的环境变量之后也没有解析。

sudo docker run -d \
--restart unless-stopped \
--name dns-proxy-server \
-p 5380:5380 \
-e MG_REGISTER_CONTAINER_NAMES=true \
--hostname dns.mageddo \
-v /opt/dns-proxy-server/conf:/app/conf \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/resolv.conf:/etc/resolv.conf defreitas/dns-proxy-server

PS:虽然以nginx为例,但DNS查找功能在很多其他场景下都有用。所以我正在寻找 DNS 查找解决方案,而不仅仅是 nginx 问题的修复。

最佳答案

有一个您可以实现的解决方案。首先启动 DNS 服务器。

docker run --rm --hostname dns.mageddo --name dns-proxy-server -p 5380:5380 \
-v /opt/dns-proxy-server/conf:/app/conf \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/resolv.conf:/etc/resolv.conf \
defreitas/dns-proxy-server

然后运行一个测试容器来测试主机名

docker run --hostname test.intranet nginx

测试它

ping test.intranet
PING test.intranet (172.18.0.3) 56(84) bytes of data.
64 bytes from 172.18.0.3 (172.18.0.3): icmp_seq=1 ttl=64 time=0.072 ms
64 bytes from 172.18.0.3 (172.18.0.3): icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from 172.18.0.3 (172.18.0.3): icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 172.18.0.3 (172.18.0.3): icmp_seq=4 ttl=64 time=0.046 ms

关于linux - 使用容器名称从主机操作系统解析 docker 容器 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000600/

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