Docker桌面DNS解析错误-复制案例
解决方案
我卸载了Docker Desktop,现在只需在我的Ubuntu 24.04 WSL2中直接运行Docker,一切正常。
问题摘要
Docker Desktop(2024年12月更新的版本)无法解析自定义网桥网络上的服务主机名,尽管服务位于同一网络上,但仍返回“地址错误”错误。
预期行为
同一Docker网络上的容器应该能够通过服务名称相互解析:
# From n8n container
ping postgres # Should resolve and respond实际行为
DNS解析完全失败:
# From n8n container
ping postgres
# Returns: "ping: bad address 'postgres'"环境
- 操作系统:Linux(基于Ubuntu/Debian)
- Docker 桌面版:2024年12月更新的版本
- Docker Compose:v2.x
繁殖步骤
- 克隆此存储库
- 跑
docker compose up -d - 等待所有服务都健康
- 执行到n8n容器中:
docker compose exec dns-test-n8n sh - 尝试ping postgres:
ping dns-test-postgres - 观察DNS故障
什么有效
- 容器可以通过IP地址相互ping
- 容器可以通过硬编码的IP进行通信
- Docker内置的网桥网络运行良好
- 使用静态IP+extra_hosts的自定义网络解决方法有效
什么不起作用
- 标准服务名称解析(例如“postgres”、“mcp”)
- 具有自动DNS的自定义网桥网络
- Docker Compose应该提供的服务发现
建筑
这是一个最小的n8n+PostgreSQL设置,演示了这个问题:
┌─────────────┐
│ dns-test- │ Tries to connect to "dns-test-postgres"
│ n8n │ ❌ DNS resolution fails
└──────┬──────┘
│
▼ (should connect here)
┌─────────────┐
│ dns-test- │ IP: Assigned by Docker
│ postgres │ Hostname: Should resolve but doesn't
└─────────────┘此回购中的文件
docker-compose.yml-最小复制设置(无变通方法).env.example-所需的环境变量README.md-此文件WORKAROUND.md-我们不得不实施的黑客解决方案
Docker桌面团队
这是一个干净的复制箱。我们已经确认这适用于静态IP extra_hosts 条目,但这不是一个合适的解决方案。我们需要正常的DNS解析才能按照记录工作。
我们的生产解决方法(在单独的私有仓库中)使用:
- 自定义网络上的静态IP
- 手册
extra_hostsdocker-compose.yml中的条目 - 这很脆弱,违背了服务发现的目的
联系
如果您需要更多信息或有疑问,请在此存储库中打开问题。
相关问题
这似乎与2024年12月中旬的Docker Desktop更新有关,该更新影响了自定义网桥网络上的DNS解析。
