docker容器 curl: (6) Could not resolve host: www.baidu.com;apt-get update 失败,yum install 失败

问题描述 :笔记本电脑 Xshell 使用SSH 协议连接CentOs 8 中的 docker 容器小白踩坑过程

想法如何而来:

在老式台式机安装了一个CentOS 8 linux 系统,闲的没意思,就在此系统上安装了 docker ,然后又运行了一个Nginx模板的容器,由于台式机运行起来声音宛如发动机,于是把它放在一个隐蔽的地方藏起来,以免打扰到家人休息,不过还好再隐蔽与我的笔记本也同处于一个局域网,那我肯定选择使用工具连接了;那么CentOS 可以直接用Xsheel  ssh协议 连接,那如果我们想用ssh连接Centos 中的Docker容器,可以吗?

答案肯定是可以的,无非就是做个端口映射(真的会那么顺利吗??)。

采坑开始:

我们 在运行 以nginx 镜像为容器的时候,做ssh 的端口映射。命令 docker run -p 80:80 -p 8000:22 -d nginx  。当我们运行Nginx 模板的容器之后,发现笔记本使用Xshell 连接 docker 容器 并不能连接成功,这是什么问题造成的呢?难道是nginx容器精简到22 端口都不开放,可是想想 这个docker 在做端口映射的时候不可能傻到这个程度,于是想到精简,果断决定是没有openssh-server 服务,要想知道能使用SSH协议连接的,linux 系统是必须使用 openssh-server 来监听22 端口的,普通的Centos 都是默认自带这项监听22端口的功能的,哎,没办法,那想玩就只能装一个,其实docker容器中 装SSH 是不推荐的,因为可以使用映射的方式来解决你想要的。

开干, 强迫症的就是想装一个 openssh-server  玩玩。 (tips:在nginx模板的docker镜像下执行:)yum  install 走起,我的天,nginx 镜像容器竟然没有装这个命令,难道要使用curl 吗? curl 也没有,对于一个刚玩linux 的我,只能借助百度了,一搜,还有apt-get 可以安装,执行一波 apt-get -y update ,总算是安装这个命令了,不过想想真是够精简的, 开心不过3秒钟,....error  error  error 呈现在我的眼前,(tips:在nginx模板的docker镜像下结束)。

  终于到了关键时刻,心想不会nginx 镜像的容器是不能ssh连接的吧,(tips:在centos 8模板的docker镜像下执行:)于是不服气就有运行了一个centos 8 镜像的容器,可喜可贺的时候centos8镜像的容器是可以 使用 yum curl ping 命令 的,于是就执行了 yum -y update 一下,很不开心的是  error  failed 有一次出现在了我的眼前,百度一波,说是需要换一下国内源,其实就算不换,不会出现 error 顶多就是慢一点而已,没有思路,还是去换了,结果并没有什么卵用,问题出在了哪里,在这个时刻突然家用路由器断了一下就恢复了,然后就使用ping 命令,ping了一下网关,能ping 通,ping 了一下www.baidu.com  ,我的天神奇的事,竟然ping不同外网,于是百度又搜一波,说是需要配置DNS服务器与宿主机一致(台式机CentOS),然后查看了一下CentOS的  Dns (命令 : vim /etc/resolv.conf),本身就是和容器是一致的,所以不是因为DNS  导致的,但是确实ping  百度的IP地址是通的,域名不通,( tips: 在centos 8模板的docker镜像下结束)

只能用此问题来搜一下了,发现 有个NAT这么个东西,最后发现 原来只是CentOS防火墙的问题,需要允许NAT转发,本人以此方式解决。

总结 : 出现此问题可能三种原因 

1,  CentOS防火墙的问题,需要允许NAT转发, 可以先检查是否允许NAT转发,NO是不允许,则需要开启,yes 是允许,则考虑第二种原因

        # 开启 NAT 转发      firewall-cmd --permanent --zone=public --add-masquerade

       # 检查是否允许 NAT 转发   firewall-cmd --query-masquerade

       # 禁止防火墙 NAT 转发            firewall-cmd --remove-masquerad

2,DNS 服务器配置问题    

         vim /etc/resolv.conf    查看宿主机的DNS  ,  将容器的DNS 与宿主机的DNS 一致,也可以配置docker 的DNS

3, 配置 yum 的 国内源了,配置方法在这就不多说,百度一搜方法一大堆。


不过前两种原因  只是在 ip可以ping 通 域名ping不同的情况下产生的,遇到这种问题还是优先考虑容器与外网是否能ping 通,可以装一个 alpine 镜像的容器来ping 一下,因为alpine 只有5.6m ,而centos 200多m,为了使用一下ping 不划算,只有安装的任何一个容器能ping通。其他容器应该也能ping 通。

如有不足之处,还请下方评论,互相学习。

你可能感兴趣的:(docker容器 curl: (6) Could not resolve host: www.baidu.com;apt-get update 失败,yum install 失败)