首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用docker编写的python应用程序的Nginx反向代理

使用docker编写的python应用程序的Nginx反向代理
EN

Stack Overflow用户
提问于 2020-07-17 00:04:16
回答 1查看 2.4K关注 0票数 2

嗨,我正在尝试用nginx反向代理创建python应用程序和redis,但是当我运行docker-复合文件时,它运行所有的容器,但是当我转到localhost:90时,它显示的是nginx页面,而不是python文件中定义的页面。我正在学习这个教程这里

码头档案:

代码语言:javascript
复制
FROM python:3
RUN pip install flask

Python文件:

代码语言:javascript
复制
from flask import Flask

app = Flask(__name__)

# to connect redis 
# use host "redis_app"
# use port "6379"
# use password "add_password_here"

@app.route('/')
def hello():
    return 'Hello NGINX reverse proxy'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

船坞-合成文件

代码语言:javascript
复制
version: '3.1'
services:
    nginx:
        image: nginx:latest
        container_name: nginx_reverseproxy
        depends_on:
            - flask
        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/default.conf
        networks:
            - docker-network
        ports:
            - 90:80
    flask:
        build:
            context: ./
            dockerfile: Dockerfile
        image: flask:v1
        container_name: flask_webapp
        volumes:
            - ./:/flask_code/
        environment:
            - FLASK_APP=/flask_code/main.py
        command: python /flask_code/main.py
        networks:
            docker-network:
                aliases:
                    - flask_webapp
        ports:
            - 8080:5000
        depends_on:
                - redis
    redis:
        image: redis
networks:
    docker-network:

nginx.conf

代码语言:javascript
复制
server {
    listen 90;
    server_name localhost;
location / {
        proxy_pass http://flask_webapp:5000/;
        proxy_set_header Host "localhost";
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 01:13:44

首先,您需要创建桥接网络。让我们假设网络名是my_project_network

代码语言:javascript
复制
docker network create --driver=bridge my_project_network

现在我们将创建python应用程序。

index.py

代码语言:javascript
复制
from flask import Flask

app = Flask(__name__)

# to connect redis 
# use host "redis_app"
# use port "6379"
# use password "add_password_here"

@app.route('/')
def hello():
    return 'Hello NGINX reverse proxy'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

我们将使用烧瓶,所以我们需要安装它。我们可以通过创建requirements.txt文件并使用pip3 install -r requirements.txt来安装它。

requirements.txt

代码语言:javascript
复制
flask==1.1.2

现在将为python应用程序创建Dockerfile

Dockerfile

代码语言:javascript
复制
FROM python:3

RUN mkdir -p /my_project

WORKDIR /my_project

COPY requirements.txt ./

RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "./index.py"]

现在将创建nginx配置文件。

default.conf

代码语言:javascript
复制
server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://flask_app:5000/;
        proxy_set_header Host "localhost";
    }
}

现在将创建docker-compose文件。

docker-compose.yml

代码语言:javascript
复制
version: "3.7"

services:
  nginx_app:
    image: nginx:latest
    depends_on:
      - flask_app
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8080:80
    networks:
      - my_project_network

  flask_app:
    build:
      context: .
      dockerfile: Dockerfile
    expose:
      - 5000
    depends_on:
      - redis_app
    networks:
      - my_project_network

  redis_app:
    image: redis:latest
    command: redis-server --requirepass add_password_here
    expose:
      - 6379
    networks:
      - my_project_network

networks:
  my_project_network:
    external: true

现在我们完成了所有的文件。所以我们将进行码头写作。

代码语言:javascript
复制
docker-compose up --build -d

要阻止它,只需使用

代码语言:javascript
复制
docker-compose stop

结果

注意:您可以用所需的任何端口替换端口8080

注意:我创建了my_project_network,可以将服务连接在码头上,组成彼此。但我不需要my_project_network就能做到。但是我更喜欢使用my_project_network将任何服务连接起来,从另一个对接者组合到这个对接者组合服务。

让我们说我们有。./anther_project/docker-compose.yml

代码语言:javascript
复制
version: "3.7"

services:
  flask_app_v2:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 5001:5001
    networks:
      - my_project_network

networks:
  my_project_network:
    external: true

flask_app_v2可以连接到redis_app,因为它们都在同一个网络中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62945229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档