端口上的 Dockerfile 不 运行

Dockefile Not running on port

我有这个 python 文件:

#!/usr/bin/python
import tornado.web
import tornado.ioloop


class RequestHandler(tornado.web.RequestHandler):
     def initialize(self):
        with open("Desktop/ControlCode/BI.yaml") as f:
            self.write(f.read())

class TEST(RequestHandler):
    def get(self):
        self.write("hahah")

class ONE(RequestHandler):
    
    async def post(self):
        self.write("hoo")

if __name__ == "__main__":
    app = tornado.web.Application([
        (r"/", TEST),
        (r"/one", ONE)
    ])

    app.listen(8888)
    print("I'm listening on port 8888")
    tornado.ioloop.IOLoop.current().start()

还有这个 dockerfile:

FROM python:3

ADD test.py /

RUN pip3 install tornado


EXPOSE 8888

CMD ["python", "./test.py"]

当我 运行 docker run -it -d -p 8888:8888 52c097beb9b4 时,创建了一个图像,但是当我转到 localhost:8888/ 时,它没有连接到它。

注意:如果我删除 with open(file) 它会起作用。知道我能做什么吗?

Docker 容器内的脚本无法访问您主机上的 Desktop/ControlCode/BI.yaml,因此我假设 an OSError is raised,因为找不到该文件。在构建 Docker 文件时复制该文件,并尝试从容器内访问它。不过要注意路径...

Docker文件:

FROM python:3

ADD test.py /
COPY Desktop/ControlCode/BI.yaml /
...

从您的脚本中:

class RequestHandler(tornado.web.RequestHandler):
 def initialize(self):
    with open("/BI.yaml") as f:
        self.write(f.read())