Linux

在 CentOS 8 上沒有與 Docker CE 容器之間的網路連接

  • January 22, 2021

docker-ce我剛剛在 CentOS 上安裝了最新版本,但我無法從相鄰伺服器訪問已發布的埠也無法從容器本身到達外部。

執行啟用了 NetworkManager 和 FirewallD 的普通 CentOS 8。預設防火牆區域是public.

版本:

  • docker-ce19.03.3(官方 Docker RPM)
  • containerd.io1.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,入口和出口都應該工作。

引用自:https://serverfault.com/questions/987686