服务器.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
正如评论中所指出的,某些发送数据通常被称为客户端,而不是服务器,这就是为什么我在谷歌上找到的信息让我误入歧途。
事实上,要使这项工作成功,您唯一需要更改的就是将
--net host
传递给 docker run
,而 不 -p
。