問(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ì)那么順利嗎?渤早?)职车。
采坑開(kāi)始:
我們 在運(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 端口都不開(kāi)放,可是想想 這個(gè)docker 在做端口映射的時(shí)候不可能傻到這個(gè)程度登下,于是想到精簡(jiǎn)茫孔,果斷決定是沒(méi)有openssh-server?服務(wù)叮喳,要想知道能使用SSH協(xié)議連接的,linux 系統(tǒng)是必須使用 openssh-server 來(lái)監(jiān)聽(tīng)22 端口的缰贝,普通的Centos 都是默認(rèn)自帶這項(xiàng)監(jiān)聽(tīng)22端口的功能的馍悟,哎,沒(méi)辦法剩晴,那想玩就只能裝一個(gè)锣咒,其實(shí)docker容器中 裝SSH 是不推薦的,因?yàn)榭梢允褂糜成涞姆绞絹?lái)解決你想要的赞弥。
開(kā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)的彻舰,?開(kāi)心不過(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 一下,很不開(kāi)心的是? 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是不允許,則需要開(kāi)啟肃弟,yes 是允許玷室,則考慮第二種原因
? ??????# 開(kāi)啟 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í)遏片。