docker - Docker - Nginx 未启用自定义配置
问题描述
我正在尝试使用 uWSGI 和 Nginx 作为反向代理来部署 Flask 应用程序。
它们通过 unix 套接字连接(至少是这样的想法)。
所以,这是我的烧瓶应用程序:
应用程序.py:
from flask import Flask
def create_app():
app = Flask(__name__)
@app.route("/")
def root():
return "Hello, world!"
return app
这是我的 Dockerfile:
FROM nginx-python
WORKDIR /app
COPY ./app .
RUN pip3 install -r requirements.txt
COPY ./demoapp.conf /etc/nginx/conf.d/demoapp.conf
EXPOSE 9090
CMD uwsgi --ini demoapp.ini
nginx-python 是我创建的自定义图像,它(显然)已经准备好使用 nginx 和 python。
这是我的 uWSGI 的 demoapp.ini:
[uwsgi]
module = app:create_app()
master = true
processes = 2
socket = demoapp.sock
chmod-socket = 666
vacuum = true
die-on-term = true
最后,这是我的 Nginx 配置:
server {
listen 9090;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass unix:/app/demoapp.sock
}
}
这就是我运行图像的方式:
$ docker container run -it -p 7777:9090 -p 6666:80 demoapp
如您所见,我正在映射两个端口。
7777
应该重定向到9090
哪个是 Nginx 用来通过 unix 套接字与 uWSGI 通信的那个。
哪个是 Nginx6666
的80
默认服务器(加载 Nginx 欢迎页面的服务器)。
我为什么要提这个?因为事实证明,当我导航到:
它说无法访问该页面。
但是当我导航到:
它完美地呈现了 Nginx 欢迎页面。
顺便说一句,我知道我可以使用 Docker Compose 并将 Flask 应用程序分离到它自己的容器中,并将 Nginx 分离到另一个容器中。
我这样做只是作为一种自我分配的练习。
解决方案
在demoapp.ini
你有
socket = demoapp.sock
与 nginx 配置中的路径不匹配。我总是在我的项目中使用完整的路径,并将.sock
文件放入/tmp/
你也在做一些我以前没见过的事情,所以如果修复上述问题不起作用,请尝试更改
[uwsgi]
module = app:create_app()
至
[uwsgi]
module = app:app
并添加
app = create_app()
到底部app.py
。
推荐阅读
- .net - ml.net 情绪分析构建生成无法启动程序“C:\Program Files\dotnet\dotnet.exe”
- mysql - Node.js - 续集远模型关系
- keras - Keras - 过滤器修剪
- python - Keras cNN 传输模型:减小最终模型大小?
- css - 你如何用窗口调整背景图像的大小
- python - 如何绑定烧瓶wtform UnboundField?
- firebase - 创建 Firebase 身份验证时出现运行时错误
- java - 无法使用 HERE api 解析任何导入
- django - 如何从 django_filters 中删除帮助文本和标签
- javascript - 添加和删除类,在滚动上应用样式