use*_*838 0 nginx flask gunicorn docker
我尝试连接docker nginx使用docker flask。这是我的项目的结构:
.
??? storage
? ??? nginx
? ? ??? static
? ? ??? image.gif
??? web
??? flask
??? app
? ??? run.py
? ??? templates
? ??? index.html
??? conf
? ??? nginx-default.conf
? ??? nginx-flask.conf
? ??? requirements.txt
??? Dockerfile
Run Code Online (Sandbox Code Playgroud)
虽然curl 127.0.0.1:50和curl 127.0.0.1:80/static/image.gif做工精细,我得到一个“403禁止”错误,当我这样做curl 127.0.0.1。更具体地说,nginx给出以下错误:
2016/03/05 17:54:37 [error] 8#8: *1 directory index of "/usr/share/nginx/html/" is forbidden, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
172.17.0.1 - - [05/Mar/2016:17:54:37 +0000] "GET / HTTP/1.1" 403 169 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0" "-"
Run Code Online (Sandbox Code Playgroud)
我创建这样的容器:
docker create \
-v $ROOT/web/flask/app/:/web/flask/app/ \
--name flask_data flask:0.1
docker run \
-d -p 127.0.0.1:50:50 \
--volumes-from flask_data \
--name flask_service flask:0.1
docker create \
-v $ROOT/storage/nginx/:/usr/share/nginx/html/ \
--name nginx_data nginx:1.9
docker run \
-v $ROOT/web/flask/conf/nginx-flask.conf:/etc/nginx/conf.d/nginx-flask.conf \
-v $ROOT/web/flask/conf/nginx-default.conf:/etc/nginx/conf.d/default \
-d -p 127.0.0.1:80:80 \
--volumes-from nginx_data \
--link flask_service:flask_service_alias \
--name nginx_service nginx:1.9
Run Code Online (Sandbox Code Playgroud)
哪里Dockerfile是:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y --no-install-recommends python-pip python-dev
COPY . /web/flask/
RUN pip install -r /web/flask/conf/requirements.txt
CMD gunicorn run:app --workers=4 --bind=0.0.0.0:50 --log-level=debug --timeout=43200 --chdir=/web/flask/app/
Run Code Online (Sandbox Code Playgroud)
并且requirements.txt是:
gunicorn==19.4.5
Flask==0.10.1
Flask-Redis==0.1.0
Flask-SQLAlchemy==2.1
Flask-MongoAlchemy==0.7.2
Run Code Online (Sandbox Code Playgroud)
nginx-default为空,nginx-flask为:
server {
listen 80;
charset utf-8;
location /avatar {
alias /usr/share/nginx/html/avatar;
}
location /scan {
alias /usr/share/nginx/html/scan;
}
location /static {
alias /usr/share/nginx/html/static;
}
location / {
proxy_pass http://flask_service_alias:50/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
看起来图像中的default.conf文件nginx正在接管/位置可能正在发生什么。您的nginx run命令具有:
-v $ROOT/web/flask/conf/nginx-default.conf:/etc/nginx/conf.d/default \
Run Code Online (Sandbox Code Playgroud)
这应该覆盖default.conf而不是default。按照目前的情况,它只会添加另一个空白default文件,并default.conf保留默认位置(位置为)/。
您的静态路由确实有效,因为nginx-flask.confto中存在显式路由,/static并且您显式调用了文件。您会403在该/位置上找到,因为默认情况下禁用索引(由autoindex选项控制)。
| 归档时间: |
|
| 查看次数: |
5624 次 |
| 最近记录: |