Linux
在 CentOS 8 上沒有與 Docker CE 容器之間的網路連接
docker-ce
我剛剛在 CentOS 上安裝了最新版本,但我無法從相鄰伺服器訪問已發布的埠,也無法從容器本身到達外部。執行啟用了 NetworkManager 和 FirewallD 的普通 CentOS 8。預設防火牆區域是
public
.版本:
docker-ce
19.03.3(官方 Docker RPM)containerd.io
1.2.6(CentOS 7 的官方 Docker RPM - CentOS 8 尚不可用)- CentOS 8.0.1905(最小安裝)
在花了幾天時間查看相關組件的日誌和配置之後,我正要認輸並返回到 Fedora 30,這似乎可以直接開箱即用。
專注於防火牆,我意識到禁用
firewalld
似乎可以解決問題,但我不想這樣做。在檢查網路規則時iptables
,我意識到切換到nftables
意味著iptables
現在是一個抽象層,只顯示規則的一小部分nftables
。這意味著大多數(如果不是全部)firewalld
配置將在iptables
.我曾經能夠在 中找到全部真相
iptables
,所以這需要一些時間來適應。長話短說 - 為此,我必須啟用偽裝。看起來
dockerd
已經這樣做了iptables
,但顯然這需要專門為防火牆區域啟用才能iptables
偽裝工作:# Masquerading allows for docker ingress and egress (this is the juicy bit) firewall-cmd --zone=public --add-masquerade --permanent # Specifically allow incoming traffic on port 80/443 (nothing new here) firewall-cmd --zone=public --add-port=80/tcp firewall-cmd --zone=public --add-port=443/tcp # Reload firewall to apply permanent rules firewall-cmd --reload
重啟或重啟
dockerd
,入口和出口都應該工作。