Dockefile未在端口上运行

问题描述

@H_404_0@我有这个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()

@H_404_0@这个dockerfile:

FROM python:3

ADD test.py /

RUN pip3 install tornado


EXPOSE 8888

CMD ["python","./test.py"]
@H_404_0@当我运行docker run -it -d -p 8888:8888 52c097beb9b4时,会创建一个图像,但是当我访问localhost:8888/时,它并没有连接。

@H_404_0@注意:如果我移除with open(file),则它可以正常工作。知道我能做什么吗?

解决方法

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

Dockerfile:

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())