Docker - Nginx 未启用自定义配置
Docker - Nginx not enabling custom configuration
我正在尝试使用 uWSGI 和 Nginx 作为反向代理来部署 Flask 应用程序。
它们通过 unix 套接字连接(至少是这样)。
所以,这是我的烧瓶应用程序:
app.py:
from flask import Flask
def create_app():
app = Flask(__name__)
@app.route("/")
def root():
return "Hello, world!"
return app
这是我的Docker文件:
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 准备就绪。
这是我的demoapp.ini uWSGI:
[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 通信的那个。
和 6666
到 80
这是 Nginx 的默认服务器(加载 Nginx 欢迎页面的服务器)。
我为什么要提这个?因为事实证明,当我导航到:
说无法访问该页面
但是 当我导航到:
它完美呈现 Nginx 欢迎页面。
作为旁注,我知道我可以使用 Docker 将 Flask 应用程序组合并分离到它自己的容器中,将 Nginx 分离到另一个容器中。
我就是这样自习的。
在demoapp.ini
你有
socket = demoapp.sock
这与 nginx 配置中的路径不匹配。我总是在我的项目中使用完整路径,并且我将 .sock
文件放在 /tmp/
中
您还做了一些我以前从未见过的事情,所以如果修复上述问题不起作用,请尝试更改
[uwsgi]
module = app:create_app()
到
[uwsgi]
module = app:app
并添加
app = create_app()
到 app.py
的底部。
我正在尝试使用 uWSGI 和 Nginx 作为反向代理来部署 Flask 应用程序。
它们通过 unix 套接字连接(至少是这样)。
所以,这是我的烧瓶应用程序:
app.py:
from flask import Flask
def create_app():
app = Flask(__name__)
@app.route("/")
def root():
return "Hello, world!"
return app
这是我的Docker文件:
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 准备就绪。
这是我的demoapp.ini uWSGI:
[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 通信的那个。
和 6666
到 80
这是 Nginx 的默认服务器(加载 Nginx 欢迎页面的服务器)。
我为什么要提这个?因为事实证明,当我导航到:
说无法访问该页面
但是 当我导航到:
它完美呈现 Nginx 欢迎页面。
作为旁注,我知道我可以使用 Docker 将 Flask 应用程序组合并分离到它自己的容器中,将 Nginx 分离到另一个容器中。
我就是这样自习的。
在demoapp.ini
你有
socket = demoapp.sock
这与 nginx 配置中的路径不匹配。我总是在我的项目中使用完整路径,并且我将 .sock
文件放在 /tmp/
您还做了一些我以前从未见过的事情,所以如果修复上述问题不起作用,请尝试更改
[uwsgi]
module = app:create_app()
到
[uwsgi]
module = app:app
并添加
app = create_app()
到 app.py
的底部。