gpt4 book ai didi

docker-compose 主机名和本地解析

转载 作者:行者123 更新时间:2023-12-02 18:14:02 27 4
gpt4 key购买 nike

当使用指定主机名( hostname: )和 IP 地址( ipv4_address: )的 docker-compose 文件创建 docker 容器时,我希望本地计算机(运行 docker 守护进程服务的计算机,也就是我的笔记本电脑)能够解析这些主机名,而无需(太多)手动干预。 IE。如果容器是主机名 my_webserver 的网络服务器服务, 我想要 my_werbserver解析为我分配给该容器的 IP 地址。

实现这一目标的最佳方法是什么?有什么比在我的笔记本电脑上手动维护/etc/hosts 更好的吗?

最佳答案

正如@Kārlis Ābele 所提到的,我认为如果没有额外的服务,您将无法满足您的需求。一种解决方案是运行 dnsmasq在与其他 docker 容器位于同一网络的 docker 容器中。见 Make the internal DNS server available from the host

docker run -d --name dns -p 53:53 -p 53:53/udp --network docker_network andyshinn/dnsmasq:2.76 -k -d

使用 localhost 检查它是否有效作为 DNS
nslookup bar localhost

可选设置 localhost作为 DNS 服务器。例如,在 Ubutu 18.04 上,编辑 /etc/resolvconf/resolv.conf.d/head .
nameserver localhost

重启 resolvconf服务。
sudo service resolvconf restart

现在您应该能够按名称 ping 容器。

编辑:
另一种解决方案(基于@Kārlis Ābele 的回答)是监听 docker 事件并更新 /etc/hosts .准系统实现:
#!/usr/bin/env bash

while IFS= read -r line; do
container_id=$(echo ${line}| sed -En 's/.*create (.*) \(.*$/\1 /p')
container_name=$(echo ${line}| sed -En 's/.*name=(.*)\)$/\1 /p')

ip_addr=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${container_id})

echo ${ip_addr} ${container_name} >> /etc/hosts
done < <(docker events --filter 'event=create')

关于docker-compose 主机名和本地解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56800445/

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