# docker容器无法解析域名

# 问题出现场景

在一台ubuntu24.04版的机器上部署了sol-time-end容器。无法访问api.deepseek.com。

image-20251122143927298

容器服务的报错信息:(注意:这是一个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

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

下面问题应该不是,因为之前这个容器在本地的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

是容器内部无法解析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-image
    
    1
    2
    3
    4
    5
  • 方法3:修改Docker守护进程的默认配置。【全局配置,修改后全部的容器都用这个解析域名。】

方法3:执行步骤

daemon.json文件中需要添加的配置。

{
  "dns": ["8.8.8.8", "223.5.5.5"]
}
1
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

# 问题总结

排查步骤建议

  1. 首先在容器内测试基础网络连通性
  2. 检查容器DNS配置
  3. 验证防火墙和安全组规则
  4. 确认是否需要代理
  5. 调整Docker网络配置重新部署
Last Updated: 11/30/2025, 2:55:40 PM