Docker Networking Disabled: UYARI: IPv4 iletimi devre dışı bırakıldı. Ağ bağlantısı çalışmayacak


109

Bir ana bilgisayardaki konteynerler, dış dünyadaki konteynerlerle "aniden" bağlantısını kaybeder. Ancak, bazı ana bilgisayarlar yenilendi ve birdenbire şu durumla karşılaştık:

  1. Ev sahibi diğer ana bilgisayarlarla iletişim kurabilir.
  2. Ana bilgisayarda çalışan kapsayıcılar diğer ana bilgisayarlarla iletişim kuramaz.

İşte bir örnek:

[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

Şimdi, kabın kendisinden aynı ana bilgisayara ping atamayız:

[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

Bu uyarıyı ilk kez Docker'ın ilk sürümlerinde görmüştüm ... Docker 1.9.1 ve 1.10.3'e sahip olmak, Bu problem nasıl çözülür?

Yanıtlar:


187

Http://chrisgilmerproj.github.io/ubuntu/network/docker/2013/09/05/ipv4-forwarding-and-docker.html'yi inceledim ve ana bilgisayardaki sorunu çözmeme yardımcı oldu.

/Etc/sysctl.conf'a şunu ekledim :

net.ipv4.ip_forward=1

Daha sonra ağ hizmetini yeniden başlattım ve ayarı doğruladım:

[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

Tüm konteynerler artık dış dünya konteynerleriyle iletişim kurabilir!


15
Ubuntu'da sudo sysctl -payarları yeniden yüklemem gerekiyordu (systemctl bulunamadı).
Nacho Coloma

2
Bu çözüme Centos 7'de yalnızca ana bilgisayardan konteynere erişmeye çalışırken ihtiyaç duyuldu (test için).
Dave C

Bir Windows ana bilgisayarında (Hyper-V'de) çalışan kapsayıcılarda benzer yaşıyorum. Windows için benzer bir ayar var mı?
Anthony Mastrean

4
ama NEDEN gerekli? ağ yönlendirme olmadan mükemmel çalışıyor, bu nedenle docker da gerektirmemeli ...
user3338098

2
@ user3338098, çünkü temeldeki dahili ağ, internet erişimi elde etmek için arayüzler arasındaki trafiği iletiyor. Bu, herhangi bir linux sistemine, bir ağ yönlendiricisinin çok uzun süredir yaptığı gibi arayüzler arasındaki trafiği yönlendirmek olduğunu belirtmek için gerekli olmuştur. Bu, varsayılan olarak kapalıdır, çünkü çoğu linux kutusu yönlendirme yapmaz ve trafiği yanlışlıkla iletmek, en kötü ihtimalle bir güvenlik tehdidi olur veya en iyi ihtimalle ağınızı gerçekten karmaşık hale getirir.
Josiah

29

Docker hizmetini yeniden başlatmayı deneyin.

Örneğin Ubuntu için:

$ sudo systemctl restart docker


6
CentOS7'de bu sorun aniden ortaya çıktı ve docker hizmetini yeniden başlatmak mükemmel bir şekilde çalıştı.
steven87vt

1
Bu işe yaradı, neden işe yaradığını bilmediğim için beni endişelendiriyor. Bir fikri olan var mı? Ya da en azından başarısızlığı tekrarlamak için adımlar?
Josiah

üreme? Docker'ı yükselttikten ve yeniden başlattıktan sonra (kernel ile Oracle Linux Server sürüm 7.8'de: - 3.10.0-1127.el7.x86_64 # 1 SMP 1 Nisan 10:20:09 PDT 2020 x86_64 x86_64 x86_64 GNU / Linux - Docker'ı yükseltin) to: docker-ce-3: 19.03.8-3.el7.x86_64 yum repo aracılığıyla: @ docker-ol7-prod)
JohannesB

1
Çalışıyor, teşekkürler! Ama işi nasıl yaptığını bilen var mı?
c0degeas

18

Bunu düzeltmek --network=hostiçin docker runkomutla birlikte eklemeyi deneyin .

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


2
Çalışırken tek bir konteyner için kullanışlıdır. Parametre--net=host
Maks13

1
Şimdi bu yaklaşımla ilgili sorun, Jenkins gibi paralel olarak çalışan birden fazla konteyneriniz varsa, bağlantı noktaları paylaşılır ve bu paylaşılan bağlantı noktalarında sorunlara çarpma riskiniz vardır. Spesifik olmak gerekirse, Cypress ile e2e testleri yürütüyoruz ve Xvfb'nin bağlantı noktaları zaten alındığı için yeni örnek üretememesi ile ilgili sorunlar yaşıyoruz.
Alex Rashkov

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.