Docker:Python服务器未侦听

Docker:Python服务器未侦听,python,docker,dockerfile,Python,Docker,Dockerfile,我正在尝试编写一个简单的python服务器,将消息(来自JSON)写入文件。当我部署docker容器时,什么也没发生。当我停止容器(键盘中断)时,所有控制台输出立即写入,容器关闭 我的python代码: import socketserver import json class PoCServer(socketserver.BaseRequestHandler): def handle(self): addr = self.client_address[0]

我正在尝试编写一个简单的python服务器,将消息(来自JSON)写入文件。当我部署docker容器时,什么也没发生。当我停止容器(键盘中断)时,所有控制台输出立即写入,容器关闭

我的python代码:

import socketserver
import json

class PoCServer(socketserver.BaseRequestHandler):

    def handle(self):
        addr = self.client_address[0]
        print("[{}] incoming connection...".format(addr))

        buff = bytes()
        while True:
            rawdata = self.request.recv(256)
            if not rawdata: break
            buff = buff + rawdata

        data = json.loads(buff.decode())

        with open("data/" + data["name"] + ".txt", "w") as f:
            f.write(data["msg"])

        print("[{}] file ".format(addr) + data["name"] + ".txt written...")

server =  socketserver.ThreadingTCPServer(("localhost", 10000), PoCServer)
print("[+] server listening...")
server.serve_forever()  
我的Dockerfile:

FROM python

WORKDIR /app

RUN mkdir /app/data

COPY server.py /app

EXPOSE 10000

CMD ["python", "server.py"]

谢谢大家!

由于服务器侦听消息在键盘中断后可见,这意味着代码工作正常,但输出得到缓冲。一旦程序退出,它们就会显示出来

使用
-u
标志运行代码应有助于解决此问题。根据python帮助页面:

-u:无缓冲二进制标准输出和标准输出

这似乎是问题所在。因此,在docker文件中,将入口点替换为
CMD[“python”、“-u”、“server.py”]


现在,这将在没有缓冲的情况下打印输出,但在公开正确的端口并将它们映射到本地系统上的端口以实际发送/接收对服务器的响应时,您应该小心。

在键盘中断后是否阅读了控制台消息?它是否打印服务器侦听消息?我有。它确实显示了侦听消息…。@T.Merk,您只在本地主机上侦听,但从容器的角度来看,您的主机是一个“远程”客户端。将“localhost”更改为“0.0.0.0”,并让我们知道这是否能够解决任何问题,将其更改为“0.0.0.0”不会改变任何事情。仍在显示:^C[+]服务器正在侦听。。。回溯(最近一次呼叫最后一次):