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

問(wèn)題描述?:筆記本電腦 Xshell 使用SSH 協(xié)議連接CentOs 8 中的 docker 容器小白踩坑過(guò)程

想法如何而來(lái):

在老式臺(tái)式機(jī)安裝了一個(gè)CentOS 8 linux 系統(tǒng),閑的沒(méi)意思,就在此系統(tǒng)上安裝了 docker ,然后又運(yùn)行了一個(gè)Nginx模板的容器,由于臺(tái)式機(jī)運(yùn)行起來(lái)聲音宛如發(fā)動(dòng)機(jī),于是把它放在一個(gè)隱蔽的地方藏起來(lái),以免打擾到家人休息,不過(guò)還好再隱蔽與我的筆記本也同處于一個(gè)局域網(wǎng),那我肯定選擇使用工具連接了;那么CentOS 可以直接用Xsheel? ssh協(xié)議 連接,那如果我們想用ssh連接Centos 中的Docker容器,可以嗎?

答案肯定是可以的,無(wú)非就是做個(gè)端口映射(真的會(huì)那么順利嗎??)。

采坑開始:

我們 在運(yùn)行 以nginx 鏡像為容器的時(shí)候,做ssh 的端口映射。命令 docker run -p 80:80 -p 8000:22 -d nginx? 。當(dāng)我們運(yùn)行Nginx 模板的容器之后,發(fā)現(xiàn)筆記本使用Xshell 連接 docker 容器 并不能連接成功,這是什么問(wèn)題造成的呢?難道是nginx容器精簡(jiǎn)到22 端口都不開放,可是想想 這個(gè)docker 在做端口映射的時(shí)候不可能傻到這個(gè)程度,于是想到精簡(jiǎn),果斷決定是沒(méi)有openssh-server?服務(wù),要想知道能使用SSH協(xié)議連接的,linux 系統(tǒng)是必須使用 openssh-server 來(lái)監(jiān)聽22 端口的,普通的Centos 都是默認(rèn)自帶這項(xiàng)監(jiān)聽22端口的功能的,哎,沒(méi)辦法,那想玩就只能裝一個(gè),其實(shí)docker容器中 裝SSH 是不推薦的,因?yàn)榭梢允褂糜成涞姆绞絹?lái)解決你想要的。

開干, 強(qiáng)迫癥的就是想裝一個(gè) openssh-server? 玩玩。 (tips:在nginx模板的docker鏡像下執(zhí)行:)yum? install 走起,我的天,nginx 鏡像容器竟然沒(méi)有裝這個(gè)命令,難道要使用curl 嗎? curl 也沒(méi)有,對(duì)于一個(gè)剛玩linux 的我,只能借助百度了,一搜,還有apt-get 可以安裝,執(zhí)行一波 apt-get -y update ,總算是安裝這個(gè)命令了,不過(guò)想想真是夠精簡(jiǎn)的,?開心不過(guò)3秒鐘,....error? error? error 呈現(xiàn)在我的眼前,(tips:在nginx模板的docker鏡像下結(jié)束)。

? 終于到了關(guān)鍵時(shí)刻,心想不會(huì)nginx 鏡像的容器是不能ssh連接的吧,(tips:在centos 8模板的docker鏡像下執(zhí)行:)于是不服氣就有運(yùn)行了一個(gè)centos 8 鏡像的容器,可喜可賀的時(shí)候centos8鏡像的容器是可以 使用 yum curl ping 命令?的,于是就執(zhí)行了 yum -y update 一下,很不開心的是? error??failed 有一次出現(xiàn)在了我的眼前,百度一波,說(shuō)是需要換一下國(guó)內(nèi)源,其實(shí)就算不換,不會(huì)出現(xiàn) error 頂多就是慢一點(diǎn)而已,沒(méi)有思路,還是去換了,結(jié)果并沒(méi)有什么卵用,問(wèn)題出在了哪里,在這個(gè)時(shí)刻突然家用路由器斷了一下就恢復(fù)了,然后就使用ping 命令,ping了一下網(wǎng)關(guān),能ping 通,ping 了一下www.baidu.com? ,我的天神奇的事,竟然ping不同外網(wǎng),于是百度又搜一波,說(shuō)是需要配置DNS服務(wù)器與宿主機(jī)一致(臺(tái)式機(jī)CentOS),然后查看了一下CentOS的? Dns (命令 :?vim /etc/resolv.conf),本身就是和容器是一致的,所以不是因?yàn)镈NS? 導(dǎo)致的,但是確實(shí)ping? 百度的IP地址是通的,域名不通,(?tips:?在centos 8模板的docker鏡像下結(jié)束)

只能用此問(wèn)題來(lái)搜一下了,發(fā)現(xiàn) 有個(gè)NAT這么個(gè)東西,最后發(fā)現(xiàn)?原來(lái)只是CentOS防火墻的問(wèn)題,需要允許NAT轉(zhuǎn)發(fā),本人以此方式解決。

總結(jié) : 出現(xiàn)此問(wèn)題可能三種原因?

1,??CentOS防火墻的問(wèn)題,需要允許NAT轉(zhuǎn)發(fā), 可以先檢查是否允許NAT轉(zhuǎn)發(fā),NO是不允許,則需要開啟,yes 是允許,則考慮第二種原因

? ??????# 開啟 NAT 轉(zhuǎn)發(fā)? ? ??firewall-cmd --permanent --zone=public --add-masquerade

? ? ? ?# 檢查是否允許 NAT 轉(zhuǎn)發(fā)? ?firewall-cmd --query-masquerade

? ? ? ?# 禁止防火墻 NAT 轉(zhuǎn)發(fā)? ? ? ? ? ??firewall-cmd --remove-masquerad

2,DNS 服務(wù)器配置問(wèn)題? ??

? ???????vim /etc/resolv.conf? ? 查看宿主機(jī)的DNS? ,? 將容器的DNS 與宿主機(jī)的DNS 一致,也可以配置docker 的DNS

3, 配置 yum 的 國(guó)內(nèi)源了,配置方法在這就不多說(shuō),百度一搜方法一大堆。


不過(guò)前兩種原因? 只是在 ip可以ping 通 域名ping不同的情況下產(chǎn)生的,遇到這種問(wèn)題還是優(yōu)先考慮容器與外網(wǎng)是否能ping 通,可以裝一個(gè) alpine 鏡像的容器來(lái)ping 一下,因?yàn)閍lpine 只有5.6m ,而centos 200多m,為了使用一下ping 不劃算,只有安裝的任何一個(gè)容器能ping通。其他容器應(yīng)該也能ping 通。

如有不足之處,還請(qǐng)下方評(píng)論,互相學(xué)習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容