Docker 네트워킹 비활성화 됨 : 경고 : 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

이제 컨테이너 자체에서 동일한 호스트를 ping 할 수 없습니다.

[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을 사용하는 경우이 문제를 해결하는 방법은 무엇입니까?

답변:


177

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을 찾을 수 없음).
Nacho Coloma

2
이 솔루션은 단순히 호스트에서 컨테이너에 액세스하려고 할 때 (테스트를 위해) Centos 7에서 필요했습니다.
Dave C

Windows 호스트 (Hyper-V)에서 실행되는 컨테이너에서 비슷한 문제가 있습니다. Windows 어딘가에 비슷한 설정이 있습니까?
Anthony Mastrean 2015 년

4
하지만 왜 필요합니까? 네트워크는 ... 그러므로 고정 표시기 중 하나를 필요가 없습니다, 포워딩없이 완벽하게 작동한다
user3338098

2
@ user3338098, 기본 내부 네트워크가 인터넷 액세스를 얻기 위해 인터페이스간에 트래픽을 전달하기 때문입니다. 이것은 네트워크 라우터가 매우 오랜 시간 동안하는 방식으로 인터페이스간에 트래픽을 라우팅한다는 것을 모든 Linux 시스템에 표시하는 데 필요했습니다. 대부분의 리눅스 박스는 포워딩을하지 않고 실수로 트래픽을 포워딩하는 것이 최악의 경우 보안 위협이되거나 네트워크를 복잡하게 만들 수 있기 때문에 기본적으로 꺼져 있습니다.
Josiah 19

25

Docker 서비스를 다시 시작하십시오.

예 : Ubuntu의 경우 :

$ sudo systemctl restart docker


5
CentOS7에서이 문제가 갑자기 나타나고 단순히 docker 서비스를 다시 시작하면 완벽하게 작동했습니다.
steven87vt

1
이것은 효과가 있었고 왜 그것이 효과가 있었는지 모르겠다는 것을 불안하게 만듭니다. 아무도 단서가 있습니까? 아니면 적어도 실패를 반복하는 단계는?
Josiah

생식? 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-Upgrade Docker 받는 사람 : docker-ce-3 : 19.03.8-3.el7.x86_64 via yum repo : @ docker-ol7-prod)
JohannesB

작동합니다, 감사합니다! 그러나 그것이 어떻게 작동했는지 아는 사람이 있습니까?
c0degeas

17

이 문제를 해결하려면 명령 --network=host과 함께 추가해보십시오 docker run.

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


2
실행중인 단일 컨테이너에 유용합니다. 매개 변수는--net=host
Max13

1
이제이 접근 방식의 문제는 Jenkins와 같이 여러 컨테이너를 병렬로 실행하는 경우 포트가 공유되고 해당 공유 포트에서 문제가 발생할 위험이 있다는 것입니다. 구체적으로 우리는 Cypress에서 e2e 테스트를 실행하고 있으며 포트가 이미 사용 되었기 때문에 Xvfb에서 새 인스턴스를 생성 할 수없는 문제가 발생합니다.
Alex Rashkov

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.