docker端口映射及外部無(wú)法訪問(wèn)問(wèn)題
docker容器內(nèi)提供服務(wù)并監(jiān)聽(tīng)8888端口,要使外部能夠訪問(wèn),需要做端口映射。
docker run -it --rm -p 8888:8888 server:v1
此時(shí)出現(xiàn)問(wèn)題,在虛機(jī)A上部署后,在A內(nèi)能夠訪問(wèn)8888端口服務(wù),但是在B卻不能訪問(wèn)。
這應(yīng)該是由于請(qǐng)求被攔截。
一、查看firewall-cmd --state
如果輸出的是“not running”則FirewallD沒(méi)有在運(yùn)行,且所有的防護(hù)策略都沒(méi)有啟動(dòng),那么可以排除防火墻阻斷連接的情況了。
如果輸出的是“running”,表示當(dāng)前FirewallD正在運(yùn)行,需要再輸入下面的命令查看現(xiàn)在開(kāi)放了哪些端口和服務(wù):
firewall-cmd --list-ports firewall-cmd --list-services
解決方案有兩種:
1.關(guān)閉FirewallD服務(wù):
如果您不需要防火墻,那直接關(guān)掉FirewallD服務(wù)就好了
systemctl stop firewalld.service
2.添加策略對(duì)外打開(kāi)指定的端口:
比如我們現(xiàn)在要打開(kāi)對(duì)外5000/tcp端口,可以使用下面的命令:
firewall-cmd --add-port=5000/tcp --permanent firewall-cmd --reload
如果只是臨時(shí)打開(kāi)端口,去掉第一行命令中的“--permanent”參數(shù),那么當(dāng)再次重啟FirewallD服務(wù)時(shí),本策略將失效。
二、ip轉(zhuǎn)發(fā)沒(méi)有打開(kāi)
sysctl net.ipv4.ip_forward
顯示net.ipv4.ip_forward=0則表示未打開(kāi)。
三、service iptables打開(kāi)并攔截了
可關(guān)閉service iptables
service iptables stop
若docker run時(shí)出現(xiàn)錯(cuò)誤:
iptables: No chain/target/match by that name.
則只需重啟docker服務(wù)即可
service docker restart
或者:
#設(shè)置iptables防火墻為開(kāi)機(jī)啟動(dòng)項(xiàng) systemctl enable iptables.service #啟動(dòng)防火墻使配置文件生效 systemctl start iptables.service #停止防火墻 systemctl stop iptables.service #重啟防火墻使配置文件生效 systemctl restart iptables.service
最終版本:
啟動(dòng)docker并進(jìn)行端口映射后,docker會(huì)在iptables中添加DNAT規(guī)則,將收到的對(duì)應(yīng)端口的包轉(zhuǎn)換ip并進(jìn)行轉(zhuǎn)發(fā),同時(shí)添加規(guī)則將所有來(lái)自docker網(wǎng)域的ip進(jìn)行轉(zhuǎn)換。
但是在Centos7上出現(xiàn)docker可以正常訪問(wèn)外網(wǎng),但是外網(wǎng)發(fā)出的請(qǐng)求在經(jīng)過(guò)eth1接收轉(zhuǎn)發(fā)后送達(dá)不到docker0,或者送到卻出現(xiàn)(oui Unknown)的狀況。暫時(shí)不清楚這到底是為什么經(jīng)過(guò)DNAT后無(wú)法送達(dá)docker0.
最終解決辦法是在啟動(dòng)docker后,重啟iptables
service iptables restart
清空docker添加的所有規(guī)則,而后添加規(guī)則
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
將所有來(lái)自docker的包172.17.0.0/16的ip替換為本機(jī)ip并發(fā)送,以達(dá)到docker訪問(wèn)外網(wǎng)的目的。
到此這篇關(guān)于docker端口映射及外部無(wú)法訪問(wèn)問(wèn)題的文章就介紹到這了,更多相關(guān)docker端口映射及外部訪問(wèn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker daemon 無(wú)法啟動(dòng): does not match with stored UUID錯(cuò)誤解決辦法
這篇文章主要介紹了Docker daemon 無(wú)法啟動(dòng): does not match with stored UUID錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11Docker API 未授權(quán)訪問(wèn)漏洞問(wèn)題解析
這篇文章主要介紹了Docker API 未授權(quán)訪問(wèn)漏洞問(wèn)題解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03關(guān)于構(gòu)建aarch64環(huán)境Mysql8.0的Docker鏡像問(wèn)題
這篇文章主要介紹了構(gòu)建aarch64環(huán)境Mysql8.0的Docker鏡像,需要的朋友可以參考下2022-04-04使用Docker+jenkins+python3環(huán)境搭建超詳細(xì)教程
這篇文章主要介紹了使用Docker+jenkins+python3環(huán)境搭建超詳細(xì)教程,本文通過(guò)多種方法結(jié)合示例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2021-07-07docker-compose實(shí)現(xiàn)容器任務(wù)編排的方法步驟
本文主要介紹了docker-compose實(shí)現(xiàn)容器任務(wù)編排的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01centos6使用docker部署zookeeper操作示例
這篇文章主要介紹了centos6使用docker部署zookeeper操作,結(jié)合實(shí)例形式分析了centos6平臺(tái)使用docker部署zookeeper相關(guān)命令與使用技巧,需要的朋友可以參考下2020-02-02Docker容器端口映射后突然無(wú)法連接的排查過(guò)程
這篇文章主要給大家介紹了關(guān)于Docker容器端口映射后突然無(wú)法連接的排查過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Docker基礎(chǔ) :網(wǎng)絡(luò)配置詳解
本篇文章將講述 Docker 的網(wǎng)絡(luò)功能,包括使用端口映射機(jī)制來(lái)將容器內(nèi)應(yīng)用服務(wù)提供給外部網(wǎng)絡(luò),以及通過(guò)容器互聯(lián)系統(tǒng)讓多個(gè)容器之間進(jìn)行快捷的網(wǎng)絡(luò)通信,有興趣的可以了解下。2017-02-02Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署
這篇文章主要介紹了Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07