如何在 docker 容器中拥有 UDP 服务器并在主机上拥有 UDP 客户端?

问题描述 投票:0回答:1

服务器.py

import socket
from time import sleep

write_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    write_socket.sendto("Hello!".encode("utf-8"), ("127.0.0.1", 8001))
    sleep(0.1)

客户端.py

import socket

read_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
read_socket.bind(("127.0.0.1", 8001))
data = read_socket.recv(128)

print(data.decode("utf-8"))

Dockerfile

FROM python:3.8

COPY ./server.py .

如果我只是在主机上运行

server.py
client.py
,那就没有问题了。客户端从服务器获取字符串并打印它。如果我尝试在这样的容器中运行服务器:

docker build . -t pyserver
docker run -it --rm -p 8001:8001/udp pyserver python ./server.py

然后运行

python3 client.py
,我得到:

Traceback (most recent call last):
  File "client.py", line 4, in <module>
    read_socket.bind(("127.0.0.1", 8001))
OSError: [Errno 98] Address already in use
docker sockets udp
1个回答
0
投票

正如评论中所指出的,某些发送数据通常被称为客户端,而不是服务器,这就是为什么我在谷歌上找到的信息让我误入歧途。

事实上,要使这项工作成功,您唯一需要更改的就是将

--net host
传递给
docker run
,而
-p

© www.soinside.com 2019 - 2024. All rights reserved.