python - 在 docker 中通过 nginx 和 gunicorn 服务 flask

标签 python nginx flask docker-compose gunicorn

玩 flask 我想在 docker 中进行真正的设置和运行。这意味着 flask 应该通过 nginx 和 gunicorn 提供服务。我建立了一个示例代码存储库 https://github.com/geoHeil/pythonServing但到目前为止还不能让 nginx 正常工作。

Flask 在 application:5000 上提供服务,docker 应该将应用程序解析为其各自的名称。

Nginx配置如下:

server {

    listen 8080;
    server_name application;
    charset utf-8;

    location / {
        proxy_pass http://application:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

我觉得不错。到目前为止我找不到问题。

编辑

撰写文件在这里。开始的命令是

docker-compose build
docker-compose up

version: '2'
services:
  application:
    restart: always
    build: ./application
    command: gunicorn -w 4 --bind :5000 wsgi:application
    links:
      - db
    expose:
     - "5000"
    ports:
      - "5000:5000"
  nginx:
    restart: always
    build: ./nginx
    links:
      - application
    expose:
      - 8080
    ports:
      - "8880:8080"

最佳答案

您的 nginx 配置文件位于错误的位置。

修复步骤:

sudo docker-compose down

删除nginx镜像:

sudo docker images
sudo docker rmi 
REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
pythonserving_nginx              latest              152698f13c7a        About a minute ago   54.3 MB

sudo docker rmi pythonserving_nginx

现在更改 nginx Dockerfile:

FROM nginx:1.11.8-alpine
MAINTAINER geoheil

ADD sites-enabled.conf /etc/nginx/conf.d/sites-enabled.conf

请注意nginx配置的位置。

现在试试这个 docker-compose 文件(使用用户定义的网络):

version: '2'
services:
  application:
    restart: always
    build: ./application
    command: gunicorn -w 4 --bind :5000 wsgi:application
    networks:
      - testnetwork
    expose:
     - "5000"
    ports:
      - "5000:5000"
  db:
    restart: always
    image: postgres:9.6.1-alpine
    networks:
      - testnetwork
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=d
      - POSTGRES_PASSWORD=d
      - POSTGRES_DB=d
    volumes:
      - ./postgres:/var/lib/postgresql
  nginx:
    restart: always
    build: ./nginx
    networks:
      - testnetwork
    expose:
      - 8080
    ports:
      - "8880:8080"
networks:
  testnetwork:

并调出容器:

sudo docker-compose up

浏览到 http://localhost:8880

关于python - 在 docker 中通过 nginx 和 gunicorn 服务 flask ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789585/

相关文章:

python - Flask login_required 在请求时导致 401 错误

python - Flask的send_file和send_from_directory有什么区别?

python - 如何在 Django Admin 的 get_queryset 中使用原始 SQL?

python - 导入错误 :No module named difflib_data

python - 不提供输入形状的 Keras Sequential

nginx - 本地主机上的多个站点由 nginx 提供服务,无需域名

python - BeautifulSoup 在 XML block 内找不到标签

apache - jquery.ajax() POST 在 Nginx/PHP-FPM 上收到 IE10 的空响应,但适用于 Apache

nginx 已卸载,本地主机 :8080 still showing nginx welcome page

python - 我如何在 flask 中检查用户填写的表单字段