Docker Networking Disabled: ВНИМАНИЕ: пересылка IPv4 отключена. Сеть не будет работать


106

Контейнеры на хосте «внезапно» теряют связь с контейнерами внешнего мира. Однако некоторые хосты обновились, и внезапно возникла следующая ситуация:

  1. Хост может связываться с другими хостами.
  2. Контейнеры, работающие на хосте, не могут связываться с другими хостами.

Вот пример:

[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

Теперь из самого контейнера мы не можем пинговать один и тот же хост:

[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

Впервые я увидел это предупреждение в начальных версиях Docker ... Имея Docker 1.9.1 и 1.10.3, как решить эту проблему?

Ответы:


180

Я просмотрел http://chrisgilmerproj.github.io/ubuntu/network/docker/2013/09/05/ipv4-forwarding-and-docker.html, и это помогло мне решить проблему на хосте.

Я добавил в /etc/sysctl.conf следующее :

net.ipv4.ip_forward=1

Затем я перезапустил сетевую службу и подтвердил настройку:

[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

Все контейнеры теперь могут связываться с контейнерами внешнего мира!


15
В Ubuntu мне нужно sudo sysctl -pбыло перезагрузить настройки (systemctl не найден).
Начо Колома

2
Это решение было необходимо на Centos 7 при простой попытке доступа к контейнеру с хоста (для тестирования).
Dave C

У меня аналогичные контейнеры, работающие на хосте Windows (на Hyper-V). Есть ли где-нибудь похожая настройка для Windows?
Энтони Мастрян,

4
но ЗАЧЕМ это нужно? сеть работает без переадресации, поэтому
докеру

2
@ user3338098, поскольку основная внутренняя сеть пересылает трафик между интерфейсами для получения доступа в Интернет. Это было необходимо, чтобы указать любой системе Linux, что она должна маршрутизировать трафик между интерфейсами так, как это делает сетевой маршрутизатор в течение очень долгого времени. По умолчанию это отключено, потому что большинство Linux-серверов не пересылают трафик, а случайная пересылка трафика в худшем случае будет угрозой безопасности или в лучшем случае действительно усложнит вашу сеть.
Josiah

28

Попробуйте перезапустить службу Docker.

Например, для Ubuntu:

$ sudo systemctl restart docker


5
В CentOS7 эта проблема внезапно появилась, и простой перезапуск службы докеров работал отлично.
steven87vt 04

1
Это сработало, заставляет меня нервничать, потому что я не знаю, почему это сработало. У кого-нибудь есть подсказка? Или хотя бы шаги, чтобы повторить провал?
Иосия

размножение? Это произошло здесь после обновления Docker и перезагрузки (в Oracle Linux Server версии 7.8 с ядром: - 3.10.0-1127.el7.x86_64 # 1 SMP Wed Apr 1 10:20:09 PDT 2020 x86_64 x86_64 x86_64 GNU / Linux - обновить Docker to: docker-ce-3: 19.03.8-3.el7.x86_64 через yum repo: @ docker-ol7-prod)
JohannesB

1
Работает, спасибо! Но кто-нибудь знает, как он работал?
c0degeas

17

Попробуйте добавить --network=hostвместе сdocker run командой, чтобы исправить это.

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


2
Полезно для одного контейнера на ходу. Параметр--net=host
Max13

1
Теперь проблема с этим подходом заключается в том, что у вас есть несколько контейнеров, работающих параллельно, например, в Jenkins, порты являются общими, и вы рискуете столкнуться с проблемами на этих общих портах. Чтобы быть конкретным, мы проводим тесты e2e с Cypress, и у нас возникают проблемы с Xvfb, который не может создать новый экземпляр, поскольку порты уже заняты.
Алекс Рашков,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.