Centos8安裝Docker容器內無法訪問網絡
在Centos8中,默認安裝的的容器管理工具是使用了Podman,Podman的設計理念非常好,整合了pod思想,用戶可以直接啓動容器而不是像Docker那樣通過守護進程啓動,這樣也會提高安全性。但是現在Podman國內使用的人數並不是很多,還會有一些問題出現。所以在Centos8上先將Podman替換爲Docker。
在安裝好Docker後,結果沒有網絡,經過排查發現是沒有開啓ip轉發。正常情況下,Docker會自動開啓地址轉發。但是,不知道爲什麼Docker在Centos8中沒有開啓iptables的地址轉發,需要我們使用firewalld
防火牆管理工具來手動開啓IP地址轉發功能。
檢查iptables
接下來會清除iptables現有規則,如果你一直使用的是firewalld
來管理你的防火牆,就沒必要查看現有的iptbales規則了
iptabels -L
臨時關閉firewalld
和docker
服務
systemctl stop firewalld docker
清除現有防火牆規則
由於docker啓動容器時會在iptables中添加規則,我們先把原來先放行規則,非常重要!
iptables -P INPUT ACCEPT
否則22端口也就是你的SSH服務可能再也連不上了。
iptables -F ##清除所有規則
開啓端口轉發
1、開啓內核IP地址轉發功能
首先查看內核是否開啓IP地址轉發功能
cat /proc/sys/net/ipv4/ip_forward
返回爲1已開啓,返回0則需要手動開一下。
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf ###複製到終端上!以root用戶身份執行。
sysctl -p ###使更改立即生效
2、防火牆放行IP地址轉發
現在將firewalld服務啓動
systemctl start firewalld
默認情況下firewalld
會禁止轉發流量,可以執行firewall-cmd --query-masquerade
查看狀態,應該是no,請執行下面的命令開啓轉發。
firewall-cmd --add-masquerade --permanent ##永久開啓IP地址轉發
firewall-cmd --reload ##重載防火牆規則,使之生效
3、啓動Docker服務
現在可以啓動docker服務
systemctl start docker
docker run -it --rm centos:latest
ping baidu.com
檢查容器網絡是否正常
額外要注意的一點是,如果你防火牆屏蔽了icmp
的echo-request
請求,也就是我們說的禁止Ping。那麼在容器中Ping別人及其的時候也會被主機防火牆攔截下來,Ping不通的哦。如果Ping不通可以使用curl www.baidu.com
看看能不能訪問得到百度頁面,這樣檢測。