在 docker 容器内接收多播

问题描述

我有以下 python 脚本在我的 docker 容器中运行。

addrinfo = socket.getaddrinfo(MYADDR,None)[0]

# Create a socket
s = socket.socket(addrinfo[0],socket.soCK_DGRAM)

# Allow multiple copies of this program on one machine
# (not strictly needed)
s.setsockopt(socket.soL_SOCKET,socket.so_REUSEADDR,1)

# Bind it to the port
s.bind(('',MYPORT))

group_bin = socket.inet_pton(addrinfo[0],addrinfo[4][0])
# Join group
if addrinfo[0] == socket.AF_INET: # IPv4
  mreq = group_bin + struct.pack('=I',socket.INADDR_ANY)
  s.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)


while 1:
    try:
        print("receiving")
        data,addr = s.recvfrom(4096)
    except socket.error as e:
        pass
    else:
        print(f"From: {addr}")
        print(f"Data: {data}")

该脚本在主机上运行良好,每隔几秒就会从多播接收数据。

当我像这样运行图像时,我什么也没收到

docker run my_image python myscript.py myaddr myport 

即使我使用主机网络,我也没有任何流量。

docker run --network host my_image python myscript.py myaddr myport 

我不想使用主机网络,因为我想从 docker compose 运行脚本并将其写入桥接网络上的数据库

build:
  context: ./backend
environment:
  - POSTGRES_HOST=db
command: python myscript.py myaddr myport
networks:
  -backend
depends_on:
  - db

另外我的主机是 windows 10,docker 容器是 ubuntu:18.04

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...