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?

Marcello de Sales
sumber

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!

Marcello de Sales
sumber
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

DmitrySandalov
sumber
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

Ganesh Chandrasekaran
sumber
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
1

Memecahkan masalah saya memulai ulang jaringan.

systemctl restart network
Cristiano Kubiaki
sumber