Docker容器使用容器名作为DNS访问报Bad Gateway,用IP可正常连通
问题根因
你遇到的容器名DNS解析失败问题,主要由以下几个常见原因导致:
- 启动Prometheus容器时未显式指定固定容器名,当前使用的
practical_lalande是Docker随机生成的临时名称,极易出现输入错误、容器重建后名称变更的问题 - 未在Grafana容器中验证DNS解析有效性,无法区分是Docker DNS服务故障还是Grafana配置问题
- 部分Docker环境(如WSL2后端的Docker Desktop)存在DNS缓存异常,导致新加入网络的容器名无法及时解析
- 若你是在宿主机器上测试容器名访问,会直接失败,Docker自定义网络的DNS解析能力仅对同网络内的容器生效,宿主环境无对应DNS路由
解决方案
按优先级依次执行以下操作即可解决:
- 第一步:删除现有随机命名的Prometheus容器,重新启动时指定固定容器名,若需要自定义访问别名也可新增
--network-alias参数,启动命令调整为:
docker run -d -p 9090:9090 --name prometheus --network-alias prom --network k6_grafana -v C:\xy\QA\K6\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
- 第二步:进入Grafana容器验证DNS解析是否正常,执行命令:
docker exec -it k6_grafana_1 nslookup prometheus
如果返回的解析地址为Prometheus容器的对应IP,即证明DNS解析正常
- 第三步:在Grafana数据源配置中直接填写
http://prometheus:9090(或对应自定义别名地址)即可正常连通 - 若上述操作仍失败,可尝试重启Docker daemon后重建两个容器,清除可能存在的DNS缓存问题
内容的提问来源于stack exchange,提问作者szegedi
相关产品推荐
相关产品推荐

