docker 埠對映 及外部無法訪問問題

2021-10-05 02:21:13 字數 1824 閱讀 6979

docker容器內提供服務並監聽8888埠,要使外部能夠訪問,需要做埠對映。

docker run -it --rm -p 8888:8888 server:v1
此時出現問題,在虛機a上部署後,在a內能夠訪問8888埠服務,但是在b卻不能訪問。

這應該是由於請求被攔截。

一、檢視firewall-cmd --state

如果輸出的是「not running」則firewalld沒有在執行,且所有的防護策略都沒有啟動,那麼可以排除防火牆阻斷連線的情況了。

如果輸出的是「running」,表示當前firewalld正在執行,需要再輸入下面的命令檢視現在開放了哪些埠和服務:

firewall-cmd --list-ports

firewall-cmd --list-services

解決方案有兩種:

1.關閉firewalld服務:

如果您不需要防火牆,那直接關掉firewalld服務就好了

systemctl stop firewalld.service
2.新增策略對外開啟指定的埠:

比如我們現在要開啟對外5000/tcp埠,可以使用下面的命令:

firewall-cmd --add-port=5000/tcp --permanent

firewall-cmd --reload

如果只是臨時開啟埠,去掉第一行命令中的「--permanent」引數,那麼當再次重啟firewalld服務時,本策略將失效。

二、ip**沒有開啟

sysctl net.ipv4.ip_forward
顯示net.ipv4.ip_forward=0則表示未開啟。

三、service iptables開啟並攔截了

可關閉service iptables

service iptables stop
若docker run時出現錯誤:

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規則,將收到的對應埠的包轉換ip並進行**,同時新增規則將所有來自docker網域的ip進行轉換。

但是在centos7上出現docker可以正常訪問外網,但是外網發出的請求在經過eth1接收**後送達不到docker0,或者送到卻出現(oui unknown)的狀況。暫時不清楚這到底是為什麼經過dnat後無法送達docker0.

最終解決辦法是在啟動docker後,重啟iptables

service iptables restart
清空docker新增的所有規則,而後新增規則

iptables -t nat -a postrouting -s 172.17.0.0/16 ! -o docker0 -j masquerade
將所有來自docker的包172.17.0.0/16的ip替換為本機ip並傳送,以達到docker訪問外網的目的。

docker 埠對映 及外部無法訪問問題

docker容器內提供服務並監聽8888埠,要使外部能夠訪問,需要做埠對映。docker run it rm p 8888 8888 server v1 此時出現問題,在虛機a上部署後,在a內能夠訪問8888埠服務,但是在b卻不能訪問。這應該是由於請求被攔截。一 檢視firewall cmd sta...

docker 開放管理埠對映 無法訪問

如果輸出的是 not running 則firewalld沒有在執行,且所有的防護策略都沒有啟動,那麼可以排除防火牆阻斷連線的情況了。如果輸出的是 running 表示當前firewalld正在執行,需要再輸入下面的命令檢視現在開放了哪些埠和服務 firewall cmd list ports fi...

docker 追加docker容器埠對映的方法

docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。但這樣太麻煩了。現在有新方案來解決掉 操作步驟 1 檢視容器 docker ps a2 停止容器 docker stop f5033 停止dock...