mDNS đến / từ một container Docker


9

Tôi đã tạo một Docker container chạy forked-daapd(một máy chủ DAAP xuất bản qua mDNS với một cổng 3689 cho các yêu cầu HTTP) và hiển thị cổng đúng cho hệ điều hành máy chủ:

sudo docker run -it --rm -v /home/naftuli/Music:/srv/music -p 3689:3689 \
    daapd /sbin/my_init

Vấn đề là dịch vụ này không bao giờ được xuất bản chính xác lên mDNS vì địa chỉ IP của nó (một số phạm vi IP Docker nội bộ) không thực sự hoạt động. Tôi có thể chạy nó với --net=host, nhưng điều đó có khả năng khá nguy hiểm vì về cơ bản tôi đang trao bộ điều hợp mạng cho container.

Có cách nào để tôi xuất bản dịch vụ này và có công việc lập bản đồ theo kế hoạch không?

Câu trả lời:


3

Vấn đề của việc cập nhật các dịch vụ mDNS (ví dụ Avahi, v.v.) là dịch vụ đó cần được biết về địa chỉ IP công cộng của nó để quảng cáo nó. Theo như tôi biết, cách duy nhất để giải quyết vấn đề này là gán IP công cộng cho bộ chứa (một chút khó khăn do thiếu hỗ trợ cho việc gán IP tĩnh trong Docker).

Bài viết này mô tả kỹ thuật làm thế nào nó có thể được thực hiện trên Debian :

  1. Dịch vụ Docker nên được bắt đầu với DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Tôi giả sử rằng br0cây cầu đã được cấu hình.

  2. Container nên được bắt đầu với --cap-add=NET_ADMIN --net=bridge

  3. Container bên pre-up ip addr flush dev eth0trong /etc/network/interfacescó thể được sử dụng để loại bỏ địa chỉ IP được gán bởi Docker như trong ví dụ sau:


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    pre-up ip addr flush dev eth0
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
  1. Kịch bản nhập của Container nên bắt đầu bằng /etc/init.d/networking start. Ngoài ra tập lệnh nhập cần chỉnh sửa hoặc điền /etc/hoststệp để xóa tham chiếu đến IP được gán bởi Docker.
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.