dan*_*oll 1 python flask docker
我在 Flask 中实现了一个基本的 REST API。我想尝试使用 Docker 将其容器化。我对 Docker 完全陌生,但根据我在各种论坛上了解到的内容,这就是我所设置的。
Dockerfile
FROM python:3.8-alpine
WORKDIR /myapplication
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
ENV FLASK_APP="app.py"
CMD ["python3", "-m" , "flask", "run"]
Run Code Online (Sandbox Code Playgroud)
要求.txt
Flask==2.0.2
Run Code Online (Sandbox Code Playgroud)
然后我去终端,然后运行
$ docker build -t myapp:latest .
构建成功,我可以my app在 Docker Desktop 应用程序中看到列出的信息
然后我跑
$ docker run --rm -it -p 8080:8080 myapp:latest
* Serving Flask app 'app.py' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Run Code Online (Sandbox Code Playgroud)
Docker Desktop 显示myapp正在使用中。
到目前为止,一切都很好。但这就是我开始遇到问题的地方。
我还使用 Postman 进行 API 路由测试。如果我要在 Docker 之外运行应用程序,并且我转到127.0.0.1:5000/data或任何其他路线,我会得到很好的响应。但是随着 Docker 构建的运行,我不再能够访问该路由或任何其他路由。
我尝试了无数的组合:127.0.0.1:5000、127.0.0.1:8080、localhost、localhost:5000、localhost:8080,但无济于事。
唯一给我任何回应的是 127.0.0.1:5000。我得到的响应是 a 403 Forbidden,邮递员说“该请求是合法请求,但服务器拒绝响应它。”
就其价值而言,我在新的 M1 Pro MacBook 上运行它。我知道新的 Mac 对权限很敏感,所以如果权限是问题,我不会感到惊讶。
我真的不知道该做什么或从这里去哪里,我尝试过的每一个来源都给了我与我已经尝试过的略有不同的东西,而且我离让它发挥作用还很远。请帮忙,谢谢。
您的 docker 应用程序正在5000容器内的端口上运行,但在您的 dockerrun命令中,您将port8080 与容器内的端口绑定在一起8080,而容器内的端口应该是5000。由于容器内的端口上没有任何内容正在运行,8080因此您会收到403错误
命令应该是
docker run --rm -it -p 8080:5000 myapp:latest
Run Code Online (Sandbox Code Playgroud)
从主机,您可以在端口 8080 上访问该应用程序,即:
127.0.0.1:8080/data # access from host machine
Run Code Online (Sandbox Code Playgroud)
127.0.0.1:5000/data # 从容器内部访问
我刚刚注意到,您没有在互联网/外部使用上公开该应用程序,在 Dockerfile 的最后一行添加 arg“--host=0.0.0.0”
CMD ["python3", "-m" , "flask", "run", "--host=0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)
docker 构建并发布端口后,您应该能够访问该应用程序。
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |