2015-07-15 15 views
10

Tôi đang "dockerizing" một ứng dụng làm UDP phát sóng heartbeating trên một cổng đã biết. Điều này là với docker-engine-1.7.0 trên nhiều máy chủ (Fedora, Centos7, SLES 12).docker docker0 và địa chỉ quảng bá vùng chứa không được đặt

Tôi nhận thấy rằng cầu 'docker0' trên máy chủ đế và 'eth0' bên trong vùng chứa đều có địa chỉ quảng bá là 0.0.0.0.

Giả sử đặc quyền quản trị trên máy chủ, tôi có thể đặt thủ công địa chỉ quảng bá trên docker0. Tương tự như vậy trong container (nếu container đang chạy đặc quyền hoặc với NET_ADMIN, NET_BROADCAST), nhưng tôi tò mò tại sao địa chỉ broadcast không được thiết lập theo mặc định. Có tùy chọn cấu hình nào tôi bị thiếu để Docker tự động thực hiện việc này không?

Host:

# ifconfig docker0 broadcast 172.17.255.255 up 
# tcpdump -i docker0 -p 5000 

container:

# ifconfig eth0 broadcast 172.17.255.255 up 
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast 

Broadcast từ các máy chủ để container cũng làm việc một lần các địa chỉ phát sóng được thiết lập.

+0

Xem thêm: https://serverfault.com/a/881662 – tne

Trả lời

0

nếu bạn đang chuyển NET_ADMIN vào vùng chứa Docker, tôi sẽ không sử dụng mạng docker0 nào cả cho ứng dụng của bạn.

Nếu tôi hiểu chính xác những gì bạn đang cố gắng làm, nhịp tim phát sóng UDP trên cổng đã biết được sử dụng bởi vùng chứa Docker thuộc các máy chủ khác nhau để tìm nhau và không phải bởi các vùng chứa khác nhau trong cùng một máy chủ lưu trữ.

Sau đó tôi sẽ khuyên bạn nên sử dụng --net=host:

docker run --net=host --cap-add NET_ADMIN ....

Như thế này nếu bạn nhận được một vỏ vào thùng chứa Docker, bạn sẽ thấy rằng môi trường mạng là giống hệt nhau một trong những máy chủ đó là chạy các thùng chứa. Nếu ứng dụng của bạn đang chạy trên máy chủ đó trước đó bằng cách sử dụng phát sóng UDP, nó sẽ hoạt động chính xác theo cách tương tự trong vùng chứa docker.

Các vấn đề liên quan