容器無法訪問外部網絡問題

[root@walker-1 tensorflow]# docker run --rm -it 285396d0a019 sh
WARNING: IPv4 forwarding is disabled. Networking will not work.
sh-4.2#

通過docker run 啓動容器後,提示

WARNING : IPv4 forwarding is disabled. Networking will not work.

同時在容器中,無法訪問外部網絡。

根據提示很容易看到,主機上的報文轉發被禁止了。導致容器報文被丟棄。

默認情況下,通過docker run 啓動的容器其網絡模式爲 bridge。容器將docker0 網橋作爲網關,通過報文轉發和主機路由實現對外部網絡訪問。

出於安全考慮,Linux系統默認是禁止數據包轉發的。所謂轉發即當主機擁有多於一塊的網卡時,其中一塊收到數據包,根據數據包的目的ip地址將數據包發往本機另一塊網卡,該網卡根據路由表繼續發送數據包。

[root@walker-1 tensorflow]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.6.254    0.0.0.0         UG    0      0        0 eth0
172.16.6.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

通過以下操作可解決上述問題:

[root@walker-1 tensorflow]# echo 1 > /proc/sys/net/ipv4/ip_forward

或者修改 /etc/sysctl.conf, 添加

net.ipv4.ip_forward=1

爲了使修改生效,執行:

[root@walker-1 tensorflow]# sysctl -p
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章