一般情況下會是以下兩個原因
一.iptables規則被修改過:
如果是這個原因,我們可以通過重啟docker,讓iptables轉發規則重新生效,一般可以處理
二.系統參數被修改(net.ipv4.ip_forward這個參數被改成0):
這個內核參數linux系統默認是0,當我們安裝docker的時候,會被docker改成1,然后實現端口轉發,容器正常運行 但是docker只是改了內存,並沒有生效到配置文件,所以配置文件里面還是0如下: sysctl -a |grep "ipv4.ip_forward" =====> net.ipv4.ip_forward = 1 cat /etc/sysctl.conf| grep "ipv4.ip_forward" =====> net.ipv4.ip_forward = 0 這種情況下,如果有人更改其他參數,然后通過sysctl -p生效,那么docker改的這個參數會被重新配置為和/etc/sysctl.conf文件 里面的一致,導致端口不通,這個時候需要重啟docker使其再次改為1。 所以我們安裝docker的時候需要先設置這個參數為1,在裝docker命令如下: sysctl -w net.ipv4.ip_forward=1 sed -i "/net.ipv4.ip_forward/ s/0/1/g" /etc/sysctl.conf
我這次忽然服務器上端口不通的就是因為圖上第一行的參數被改成了0,改回1之后,使用 sysctl -p 命令讓內核參數修改生效,問題解決。