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

ここで、コンテナ自体から、同じホストに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が見つかりませんでした)。
ナチョコロマ

2
このソリューションは、Centos 7で、ホストからコンテナにアクセスする(テスト用)ために必要でした。
Dave C

Windowsホスト(Hyper-V)で実行されているコンテナーでも同様です。Windowsのどこかに同様の設定はありますか?
Anthony Mastrean 2017

4
なぜそれが必要なのですか?ネットワークは転送せずに完全に機能しているため、
Docker

2
@ user3338098、基盤となる内部ネットワークがインターフェース間のトラフィックを転送してインターネットアクセスを取得するため。これは、ネットワークルーターが非常に長い間行う方法でインターフェース間でトラフィックをルーティングすることをLinuxシステムに示すために必要でした。ほとんどのLinuxボックスは転送を行わず、誤ってトラフィックを転送することは最悪の場合セキュリティ上の脅威になるか、ネットワークを本当に複雑にするため、これはデフォルトでオフになっています。
ジョサイア

25

Dockerサービスを再起動してみてください。

例えばUbuntuの場合:

$ sudo systemctl restart docker


5
CentOS7でこの問題が突然発生し、Dockerサービスを再起動するだけで完全に機能しました。
steven87vt

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-Upgrade Docker to: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のように複数のコンテナーを並行して実行している場合、ポートが共有され、それらの共有ポートで問題が発生するリスクがあることです。具体的には、サイプレスでe2eテストを実行しており、ポートがすでに使用されているため、Xvfbが新しいインスタンスを生成できないという問題が発生しています。
Alex Rashkov

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.