# docker容器无法解析域名
# 问题出现场景
在一台ubuntu24.04版的机器上部署了sol-time-end容器。无法访问api.deepseek.com。

容器服务的报错信息:(注意:这是一个java的springboot服务。)
2025-11-22 13:52:57.220 WARN 1 --- [nio-8080-exec-8] o.s.a.r.a.SpringAiRetryAutoConfiguration : Retry error. Retry count: 1, Exception: I/O error on POST request for "https://api.deepseek.com/v1/chat/completions": api.deepseek.com
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://api.deepseek.com/v1/chat/completions": api.deepseek.com
1
2
3
2
3
ResourceAccessException是:资源访问异常。
# 问题分析
第一时间想到的就是dns无法解析异常。怎么验证呢?答:进入容器的内部使用dns检查命令来验证。(ping/nslookup )
# 进入容器
docker exec -it <容器名> /bin/bash
# 测试DNS解析
nslookup api.deepseek.com
# 或
ping api.deepseek.com
# 测试端口连通性
telnet api.deepseek.com 443
# 或
curl -v https://api.deepseek.com
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
下面问题应该不是,因为之前这个容器在本地的docke是能正常运行的。
- 网络出口限制
- 防火墙/安全组
- 代理配置问题
- 容器网络模式
# 验证容器内nds解析是否异常
gun@gun:~$ sudo docker exec -it sol-time-end /bin/sh
/home #
/home # nslookup api.deepseek.com
Server: 127.0.0.11
Address: 127.0.0.11:53
;; connection timed out; no servers could be reached
/home # ping api.deepseek.com
ping: bad address 'api.deepseek.com'
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
是容器内部无法解析dns问题。怎么解决?
答:有多种方法。
方法1:在Dockerfile中预设网络配置
FROM openjdk:8-jre-alpine # 设置DNS RUN echo "nameserver 8.8.8.8" > /etc/resolv.conf && \ echo "nameserver 114.114.114.114" >> /etc/resolv.conf # 您的应用配置...1
2
3
4
5
6
7方法2:调整Docker网络配置。docker网络模式可以阅读:论docker网桥模式 | 匆匆趣玩 (opens new window)
# 使用host网络模式(共享主机网络) docker run --network=host your-app-image # 或自定义DNS docker run --dns=8.8.8.8 --dns=114.114.114.114 your-app-image1
2
3
4
5方法3:修改Docker守护进程的默认配置。【全局配置,修改后全部的容器都用这个解析域名。】
方法3:执行步骤
daemon.json文件中需要添加的配置。
{
"dns": ["8.8.8.8", "223.5.5.5"]
}
1
2
3
2
3
创建daemon.json配置文件。
sudo touch /etc/docker/daemon.json
1
daemon.json一般在那个目录下
在centos7上一般默认是在/etc/docker/daemon.json。(没有就在这个目录下创建)
在ubuntu24.03上一般默认也是在/etc/docker/daemon.json。(没有就在这个目录下创建)
前提是通过官方文档步骤安装的docker服务。
最后要让配置生效需要重新启动docker服务。
sudo systemctl restart docker
1
验证docker容器内部是否能正常解析域名。
gun@gun:/etc/docker$ sudo docker exec -it sol-time-end /bin/sh
/home # ping api.deepseek.com
PING api.deepseek.com (116.205.40.114): 56 data bytes
64 bytes from 116.205.40.114: seq=0 ttl=48 time=45.949 ms
64 bytes from 116.205.40.114: seq=1 ttl=48 time=43.060 ms
64 bytes from 116.205.40.114: seq=2 ttl=48 time=42.621 ms
64 bytes from 116.205.40.114: seq=3 ttl=48 time=48.357 ms
1
2
3
4
5
6
7
2
3
4
5
6
7
# 问题总结
排查步骤建议
- 首先在容器内测试基础网络连通性
- 检查容器DNS配置
- 验证防火墙和安全组规则
- 确认是否需要代理
- 调整Docker网络配置重新部署