【问题标题】:Docker - UDP Broadcast not working under MacOSDocker - UDP 广播在 MacOS 下不起作用
【发布时间】:2020-12-04 05:18:32
【问题描述】:

我有一个 python 应用程序,它通过 UDP 广播数据包搜索网络上的设备。我的代码在 Windows、MacOS (Darwin)、Docker (Windows Host) 下运行良好,但在 MacOS (Darwin) 上运行良好。谁能指出我找到并解决原因的方向。

Mac IP(和要找到的设备)的 IP 为 192.168.2.x 通常 192.168.2.255 作为广播作品

Python 代码: (为 MacOS 尝试了各种广播地址)

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
server.settimeout(0.2)
server.bind(("", 9302))
message = msgpack.packb({“service”: “control.ws”})
a=2
print("\tLooking for Server:")
while a>1:
    print("\t\tSending broadcast #"+str(a))
    server.sendto(message, (Broadcast_Addr, 9101))
    print("\t\t…Broadcast to: “, Broadcast_Addr)
    time.sleep(1)
    try:
        data, addr = server.recvfrom(1024)
    except socket.error as e:
        print(“Error getting socket data: %s” % e)
        print(“Exiting Program Now”)
        sys.exit(1)
    except:
        print(”****Stopped looking - Major Error!")
        sys.exit(1)
    else:
        Server_Data = msgpack.unpackb(data)
        #Server was found
a=a-1

Windows Docker 调用(有效)

docker run -it -p 8765:8765 -v C:\ABC_Volume:/logs -p 9101:9101/udp -p 9302:9302/udp myimage:v1

MacOS Docker 调用(不起作用)*

m$ docker run -it -p 8765:8765 -p 9101:9101/udp -p 9302:9302/udp  myimage.v1

Docker Information from MacOS

【问题讨论】:

  • 在什么方面不起作用?你能更正 Python 代码中的缩进和引号吗? docker run 行你有启动 shell 而不是运行你的脚本,并且有一些 --link 到其他容器;你能提供一个足以构建和运行它的minimal reproducible example 吗?
  • 它不起作用,因为python代码永远不会在网络上找到设备。我不确定广播是否没有离开主机,或者没有回复(我不知道如何检查)。对代码和命令感到抱歉 - 我已经清理了它们。我不确定如何重现,因为您需要找到设备。

标签: macos docker udp


【解决方案1】:

UDP 广播和主机网络在 Docker for Mac 上不起作用。您的代码可能没问题(因为它适用于所有其他平台)。最好的解决方案是启动一个 VM 并在其中运行 docker。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2018-06-23
    • 2017-11-19
    相关资源
    最近更新 更多