Đã tắt kết nối mạng Docker: CẢNH BÁO: Chuyển tiếp IPv4 bị tắt. Kết nối mạng sẽ không hoạt động


106

Các vùng chứa trong một máy chủ lưu trữ "đột nhiên" mất kết nối với các vùng chứa bên ngoài. Tuy nhiên, một số máy chủ đã được làm mới và đột nhiên chúng tôi gặp phải tình huống sau:

  1. Máy chủ có thể giao tiếp với các máy khác.
  2. Các vùng chứa đang chạy trong máy chủ không thể giao tiếp với các máy chủ khác.

Đây là một ví dụ:

[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

Bây giờ, từ chính vùng chứa, chúng ta không thể ping cùng một máy chủ:

[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

Lần đầu tiên tôi thấy cảnh báo này là trong các phiên bản đầu tiên của Docker ... Có Docker 1.9.1 và 1.10.3, Làm thế nào để giải quyết vấn đề này?

Câu trả lời:


177

Tôi đã xem lại http://chrisgilmerproj.github.io/ubuntu/network/docker/2013/09/05/ipv4-nticing-and-docker.html và nó đã giúp tôi giải quyết vấn đề trên máy chủ.

Tôi đã thêm phần sau vào /etc/sysctl.conf :

net.ipv4.ip_forward=1

Sau đó, tôi khởi động lại dịch vụ mạng và xác thực cài đặt:

[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ất cả các thùng chứa giờ đây có thể giao tiếp với các thùng chứa thế giới bên ngoài!


15
Trên Ubuntu, tôi cần sudo sysctl -ptải lại cài đặt (không tìm thấy systemctl).
Nacho Coloma

2
Giải pháp này cần thiết trên Centos 7 khi chỉ cần cố gắng truy cập vùng chứa từ máy chủ (để thử nghiệm).
Dave C

Tôi đang gặp vấn đề tương tự trong các vùng chứa chạy trên máy chủ Windows (trên Hyper-V). Có cài đặt tương tự ở đâu đó cho Windows không?
Anthony Mastrean

4
nhưng TẠI SAO nó lại cần thiết? mạng đang làm việc một cách hoàn hảo mà không cần chuyển tiếp, do đó Docker không nên đòi hỏi nó, hoặc ...
user3338098

2
@ user3338098, vì mạng nội bộ bên dưới đang chuyển tiếp lưu lượng giữa các giao diện để truy cập internet. Điều này là cần thiết để chỉ ra cho bất kỳ hệ thống linux nào rằng nó định tuyến lưu lượng giữa các giao diện theo cách mà một bộ định tuyến mạng thực hiện trong một thời gian rất dài. Điều này được tắt theo mặc định vì hầu hết các hộp linux không chuyển tiếp và việc chuyển tiếp lưu lượng vô tình sẽ là mối đe dọa bảo mật tồi tệ nhất hoặc thực sự làm phức tạp mạng của bạn.
Josiah

25

Thử khởi động lại dịch vụ Docker.

Ví dụ: cho Ubuntu:

$ sudo systemctl restart docker


5
Trên CentOS7, sự cố này đột nhiên xuất hiện và chỉ cần khởi động lại dịch vụ docker đã hoạt động hoàn hảo.
steven87vt

1
Điều này đã hiệu quả, khiến tôi lo lắng rằng tôi không biết tại sao nó hoạt động. Bất cứ ai có một đầu mối? Hoặc ít nhất các bước để lặp lại thất bại?
Josiah

sinh sản? Nó đã xảy ra ở đây sau khi nâng cấp Docker và khởi động lại (trên Oracle Linux Server phiên bản 7.8 với nhân: - 3.10.0-1127.el7.x86_64 # 1 SMP Wed ngày 1 tháng 4 10:20:09 PDT 2020 x86_64 x86_64 x86_64 GNU / Linux - nâng cấp Docker tới: docker-ce-3: 19.03.8-3.el7.x86_64 qua yum repo: @ docker-ol7-prod)
JohannesB

Nó hoạt động, cảm ơn! Nhưng có ai biết nó đã làm công việc như thế nào không?
c0degeas

17

Hãy thử thêm --network=hostcùng với docker runlệnh để sửa lỗi này.

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


2
Hữu ích cho một container duy nhất đang chạy. Tham số là--net=host
Tối đa 13

1
Bây giờ vấn đề với cách tiếp cận này là nếu bạn có nhiều container chạy song song, như trên Jenkins, các cổng được chia sẻ và bạn có nguy cơ gặp sự cố trên các cổng được chia sẻ đó. Cụ thể, chúng tôi đang chạy thử nghiệm e2e với Cypress và chúng tôi gặp sự cố với việc Xvfb không thể sinh ra phiên bản mới khi các cổng đã được sử dụng.
Alex Rashkov

1

Đã giải quyết vấn đề khởi động lại mạng của tôi.

systemctl restart network
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.