簡體   English   中英

Docker 容器和獨立桌面應用程序中的多播不起作用

[英]Multicast in Docker container and on standalone desktop application not working

我有一個監視多播流以查看流是否正常工作的應用程序 (UI)。 最重要的是,我有一個 docker 容器(在“network_mode:host”中運行),它還監聽多播流並將它們緩存在數據庫中。

撰寫文件如下所示:

version: "3"
services:
  my-multicast-container:
    image: my-multicast-container-image:latest
    depends_on:
      - my-database
    network_mode: host
  my-database:
    image: my-database-image:latest
    restart: always
    ports:
      - ... #forwarded ports for the other container

我的問題是:當我收聽 docker 容器內的多播流時,與 docker 運行在同一主機上的監控應用程序無法收聽 Z05B6053C41A2130AFD6FC3B158BDA 正在收聽的相同流。 正如我在網上閱讀的那樣,由於容器的工作方式,無法在沒有“network_mode:host”的 docker 容器中收聽多播,......並且似乎無法找到解決該問題的方法。

如何在我的 docker 容器和桌面應用程序中接收多播數據包?

僅供參考:不知道這是否重要,但我使用 CentOS 作為主機操作系統

問題實際上與多播無關,而實際上與擁有多播 UDP 套接字的用戶有關。

docker容器默認以root用戶啟動,監控界面以宿主用戶啟動。 並且,如 SO_REUSEPORT 文檔中所述:

為防止不需要的進程劫持已由服務器使用 SO_REUSEPORT 綁定的端口,以后綁定到該端口的所有服務器必須具有與用於在套接字上執行第一次綁定的有效用戶 ID 匹配的有效用戶 ID .

因此,要重新使用套接字,解決方案是使用主機的用戶運行 docker 容器,如下所示:

docker run --rm -u $(id -u ${USER}):$(id -g ${USER}) --network=host \
 my-multicast-container-image:latest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM