docker端口映射及外部無法訪問問題
docker容器內提供服務并監(jiān)聽8888端口,要使外部能夠訪問,需要做端口映射。
docker run -it --rm -p 8888:8888 server:v1
此時出現(xiàn)問題,在虛機A上部署后,在A內能夠訪問8888端口服務,但是在B卻不能訪問。
這應該是由于請求被攔截。
一、查看firewall-cmd --state如果輸出的是“not running”則FirewallD沒有在運行,且所有的防護策略都沒有啟動,那么可以排除防火墻阻斷連接的情況了。
如果輸出的是“running”,表示當前FirewallD正在運行,需要再輸入下面的命令查看現(xiàn)在開放了哪些端口和服務:
firewall-cmd --list-portsfirewall-cmd --list-services
解決方案有兩種:
1.關閉FirewallD服務:
如果您不需要防火墻,那直接關掉FirewallD服務就好了
systemctl stop firewalld.service
2.添加策略對外打開指定的端口:
比如我們現(xiàn)在要打開對外5000/tcp端口,可以使用下面的命令:
firewall-cmd --add-port=5000/tcp --permanentfirewall-cmd --reload
如果只是臨時打開端口,去掉第一行命令中的“--permanent”參數(shù),那么當再次重啟FirewallD服務時,本策略將失效。
二、ip轉發(fā)沒有打開sysctl net.ipv4.ip_forward
顯示net.ipv4.ip_forward=0則表示未打開。
三、service iptables打開并攔截了可關閉service iptables
service iptables stop
若docker run時出現(xiàn)錯誤:
iptables: No chain/target/match by that name.
則只需重啟docker服務即可
service docker restart
或者:
#設置iptables防火墻為開機啟動項 systemctl enable iptables.service#啟動防火墻使配置文件生效 systemctl start iptables.service#停止防火墻 systemctl stop iptables.service#重啟防火墻使配置文件生效 systemctl restart iptables.service
最終版本:
啟動docker并進行端口映射后,docker會在iptables中添加DNAT規(guī)則,將收到的對應端口的包轉換ip并進行轉發(fā),同時添加規(guī)則將所有來自docker網(wǎng)域的ip進行轉換。
但是在Centos7上出現(xiàn)docker可以正常訪問外網(wǎng),但是外網(wǎng)發(fā)出的請求在經(jīng)過eth1接收轉發(fā)后送達不到docker0,或者送到卻出現(xiàn)(oui Unknown)的狀況。暫時不清楚這到底是為什么經(jīng)過DNAT后無法送達docker0.
最終解決辦法是在啟動docker后,重啟iptables
service iptables restart
清空docker添加的所有規(guī)則,而后添加規(guī)則
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
將所有來自docker的包172.17.0.0/16的ip替換為本機ip并發(fā)送,以達到docker訪問外網(wǎng)的目的。
到此這篇關于docker端口映射及外部無法訪問問題的文章就介紹到這了,更多相關docker端口映射及外部訪問內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!
相關文章:
1. python 如何在 Matplotlib 中繪制垂直線2. ASP常用日期格式化函數(shù) FormatDate()3. 開發(fā)效率翻倍的Web API使用技巧4. 如何通過python實現(xiàn)IOU計算代碼實例5. bootstrap select2 動態(tài)從后臺Ajax動態(tài)獲取數(shù)據(jù)的代碼6. CSS3中Transition屬性詳解以及示例分享7. js select支持手動輸入功能實現(xiàn)代碼8. Python 操作 MySQL數(shù)據(jù)庫9. vue使用moment如何將時間戳轉為標準日期時間格式10. python中@contextmanager實例用法
