Jaringan Docker Dinonaktifkan: PERINGATAN: Penerusan IPv4 dinonaktifkan. Jaringan tidak akan berfungsi


106

Container dalam host "tiba-tiba" kehilangan koneksi ke container dunia luar. Namun, beberapa tuan rumah disegarkan dan tiba-tiba kami mengalami situasi berikut:

  1. Tuan rumah dapat berkomunikasi dengan tuan rumah lainnya.
  2. Container yang berjalan di host tidak dapat berkomunikasi dengan host lain.

Berikut contohnya:

[root@pprdespap322 deploy]# ping ci.docker.company.net
PING pprdespap324.corp.company.net (10.137.55.22) 56(84) bytes of data.
64 bytes from pprdespap324.corp.company.net (10.137.55.22): icmp_seq=1 ttl=64 time=0.282 ms
64 bytes from pprdespap324.corp.company.net (10.137.55.22): icmp_seq=2 ttl=64 time=0.341 ms
^C
--- pprdespap324.corp.company.net ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.282/0.311/0.341/0.034 ms

Sekarang, dari container itu sendiri, kita tidak dapat melakukan ping ke host yang sama:

[root@pprdespap322 deploy]# docker run -ti quay.io/coreos/registry ping ci.docker.company.net
WARNING: IPv4 forwarding is disabled. Networking will not work.
ping: unknown host ci.docker.company.net

Pertama kali saya melihat peringatan ini adalah di versi awal Docker ... Memiliki Docker 1.9.1 dan 1.10.3, Bagaimana cara mengatasi masalah ini?

Jawaban:


177

Saya meninjau http://chrisgilmerproj.github.io/ubuntu/network/docker/2013/09/05/ipv4-forwarding-and-docker.html dan membantu saya memecahkan masalah pada host.

Saya menambahkan yang berikut ini ke /etc/sysctl.conf :

net.ipv4.ip_forward=1

Saya kemudian memulai ulang layanan jaringan dan memvalidasi pengaturan:

[root@pprdespap322 deploy]#  systemctl restart network
[root@pprdespap322 deploy]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@pprdespap322 deploy]# docker run -ti quay.io/coreos/registry ping ci.docker.company.net
PING pprdespap324.corp.company.net (10.137.55.22) 56(84) bytes of data.
64 bytes from pprdespap324.corp.company.net (10.137.55.22): icmp_seq=1 ttl=63 time=0.329 ms
64 bytes from pprdespap324.corp.company.net (10.137.55.22): icmp_seq=2 ttl=63 time=0.306 ms
^C
--- pprdespap324.corp.company.net ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.306/0.317/0.329/0.021 ms

Semua kontainer sekarang dapat berkomunikasi dengan kontainer dunia luar!


15
Di Ubuntu saya perlu sudo sysctl -pmemuat ulang pengaturan (systemctl tidak ditemukan).
Nacho Coloma

2
Solusi ini diperlukan di Centos 7 saat mencoba mengakses container dari host (untuk pengujian).
Dave C

Saya mengalami hal serupa dalam wadah yang berjalan pada host Windows (di Hyper-V). Apakah ada pengaturan serupa di suatu tempat untuk Windows?
Anthony Mastrean

4
tapi KENAPA itu dibutuhkan? jaringan bekerja dengan sempurna tanpa penerusan, oleh karena itu buruh pelabuhan juga tidak memerlukannya ...
user3338098

2
@ user3338098, karena jaringan internal yang mendasarinya meneruskan lalu lintas antar antarmuka untuk mendapatkan akses internet. Ini diperlukan untuk menunjukkan ke sistem linux mana pun bahwa ia akan merutekan lalu lintas antar antarmuka dengan cara yang dilakukan router jaringan untuk waktu yang sangat lama. Ini dimatikan secara default karena kebanyakan kotak linux tidak melakukan penerusan dan meneruskan lalu lintas secara tidak sengaja akan menjadi ancaman keamanan yang paling buruk atau benar-benar memperumit jaringan Anda.
Yosia

25

Coba mulai ulang layanan Docker.

Misalnya untuk Ubuntu:

$ sudo systemctl restart docker


5
Di CentOS7 masalah ini tiba-tiba muncul dan memulai ulang layanan buruh pelabuhan bekerja dengan sempurna.
steven87vt

1
Ini berhasil, membuat saya gugup karena saya tidak tahu mengapa itu berhasil. Ada yang punya petunjuk? Atau setidaknya langkah-langkah untuk mengulang kegagalan?
Yosia

reproduksi? Itu terjadi di sini setelah memutakhirkan Docker dan mem-boot ulang (pada Oracle Linux Server rilis 7.8 dengan kernel: - 3.10.0-1127.el7.x86_64 # 1 SMP Rabu 1 Apr 10:20:09 PDT 2020 x86_64 x86_64 x86_64 GNU / Linux - perbarui Docker ke: docker-ce-3: 19.03.8-3.el7.x86 melalui yum repo: @ docker-ol7-prod)
JohannesB

Berhasil, terima kasih! Tapi ada yang tahu bagaimana cara kerjanya?
c0degeas

17

Coba tambahkan --network=hostbersama dengan docker runperintah untuk memperbaikinya.

https://medium.com/@gchandra/docker-ipv4-forwarding-is-disabled-8499ce59231e


2
Berguna untuk satu kontainer yang sedang dijalankan. Parameternya adalah--net=host
Max13

1
Sekarang masalah dengan pendekatan ini adalah jika Anda memiliki banyak kontainer yang berjalan secara paralel, seperti di Jenkins, port dibagikan dan Anda berisiko mengalami masalah pada port bersama tersebut. Untuk lebih spesifiknya kami menjalankan tes e2e dengan Cypress dan kami mendapatkan masalah dengan Xvfb yang tidak dapat menelurkan contoh baru karena port sudah diambil.
Alex Rashkov

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.