docker 容器无法使用dns解析域名异常问题排查

 更新时间:2026年04月29日 09:02:06   作者:tnan2522  
本文介绍了容器内DNS解析失败的排查方法,当容器无法解析域名时,可以通过nsenter命令进入容器网络空间进行调试, 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在宿主机上可以 ping baidu.com ,但是在容器里面无法使用dns,即无法ping baidu.com ,这种情况,可以参考 Docker容器内无法解析域名:Temporary failure in name resolution

但是如果参考上面依旧无法解决,那么可以参考以下记录

1 进入容器网络空间

有些镜像没有ping命令,这样的容器排查问题起来会很麻烦,这时候就可以在宿主机上,通过命令进入指定容器的网络空间里面,这样可以使用宿主机里面的ping命令,方便我们调试

 nsenter -n -t `docker inspect -f '{{.State.Pid}}' 容器id`

命令解释:docker inspect -f ‘{{.State.Pid}}’ 容器id 获取容器的pid, nsenter -n -t 命令用于进入指定进程的网络命名空间

执行完命令后,如果没有报错即进入了容器的网络空间了
这时候可以使用ping 命令进行 dns测试,如 ping baidu.com

正常情况应该可以看到这种情况:

但是,能看到文章这里的都是不正常的,应该是下面这种情况才对

2 问题排查

ping不通,使用 nslookup baidu.com 进行排查的时候,发现请求了127.0.0.53这个地址,但是我们容器里面根本没有这个地址,正常来说应该是请求本地,也就是127.0.0.11才对,这就发现问题了

3 修改问题

修改本机dns配置

# 停止并禁用 systemd-resolved
sudo systemctl disable --now systemd-resolved
# 删除符号链接
sudo rm /etc/resolv.conf
# 复制以下配置到 resolv.conf中
vi /etc/resolv.conf
	nameserver 127.0.0.11
	nameserver 8.8.8.8
	nameserver 8.8.4.4
	options ndots:0
# 重启 Docker
sudo systemctl restart docker
# 退出当前容器网络空间
exit

如果执行第一步 sudo systemctl disable --now systemd-resolved 的时候出现一下情况,那么这代表当前机器你有更改过hostname,比如加入docker swarm 集群的时候改的名字

这时候就需要加一条记录,把你当前主机名称hostname记录加进入即可

sudo vim /etc/hosts

这样再执行以上 修改本机dns记录的命令就不会出现sudo: unable to resolve host nodealiyun: Temporary failure in name resolution 问题了

执行完异常 修改本机dns记录的命令后, 再重新进入一下容器的网络空间:

nsenter -n -t `docker inspect -f '{{.State.Pid}}' 容器id

这时候再进行ping的时候,可以正常了

到此这篇关于docker 容器无法使用dns解析域名异常问题排查的文章就介绍到这了,更多相关docker无法使用dns解析域名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker网络配置从基础到高级实践的完全指南

    Docker网络配置从基础到高级实践的完全指南

    Docker 网络系统允许容器之间、容器与主机以及外部网络进行安全可控的通信,理解 Docker 网络是构建可靠容器化应用的关键,下面我们就来看看Docker基础网络配置和高级网络配置的具体方法吧
    2025-05-05
  • Docker搭建PlantUML服务生成UML图的实践分享

    Docker搭建PlantUML服务生成UML图的实践分享

    PlantUML 是一款开源的 UML 图形生成工具,它支持生成类图、时序图、用例图、活动图等多种类型的 UML 图,广泛应用于软件设计、文档编写以及团队沟通中,本文给大家介绍了Docker搭建PlantUML服务生成UML图的最佳实践,需要的朋友可以参考下
    2025-03-03
  • docker如何查看容器启动命令(已运行的容器)

    docker如何查看容器启动命令(已运行的容器)

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,下面这篇文章主要给大家介绍了关于docker如何查看容器启动命令(已运行的容器)的相关资料,需要的朋友可以参考下
    2023-02-02
  • docker容器数据卷之具名挂载和匿名挂载问题

    docker容器数据卷之具名挂载和匿名挂载问题

    容器数据卷就是目录的挂载,将我们的容器的目录挂载到宿主机上,从而实现打通宿主机和容器之间的文件共享功能,这篇文章主要介绍了docker容器数据卷 - 具名挂载和匿名挂载问题,需要的朋友可以参考下
    2021-11-11
  • 如何Docker化Python Django应用程序

    如何Docker化Python Django应用程序

    今天小编就为大家分享一篇关于如何Docker化Python Django应用程序的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-09-09
  • 解决虚拟机挂起后再恢复后Docker部署的应用无法连接问题

    解决虚拟机挂起后再恢复后Docker部署的应用无法连接问题

    这篇文章主要介绍了解决虚拟机挂起后再恢复后Docker部署的应用无法连接问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Docker 镜像国内加速的方法汇总(收藏版)

    Docker 镜像国内加速的方法汇总(收藏版)

    本文介绍了在国内使用Docker时遇到的加速和优化方法,针对国内下载速度慢和断线问题,可以使用国内可用的DockerRegistryMirrors或自建DockerRegistryMirror/Proxy,针对没有公共镜像库账号导致的限流问题,可以注册各个镜像库账号并登录,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • Docker部署kafka遇到的问题及解决

    Docker部署kafka遇到的问题及解决

    在启动容器后,状态显示为“Exited”,日志显示连接ZooKeeper超时,原因是端口不通,通过配置安全组相关端口后重新启动容器,查看日志显示“started”,说明容器启动成功
    2024-09-09
  • Docker中部署Mino并挂载配置文件的项目实践

    Docker中部署Mino并挂载配置文件的项目实践

    本文主要介绍了Docker中部署Mino并挂载配置文件的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • linux环境部署及docker安装redis的方法

    linux环境部署及docker安装redis的方法

    这篇文章主要介绍了linux环境部署及docker安装redis的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论