嗨,我正在尝试用nginx反向代理创建python应用程序和redis,但是当我运行docker-复合文件时,它运行所有的容器,但是当我转到localhost:90时,它显示的是nginx页面,而不是python文件中定义的页面。我正在学习这个教程这里
码头档案:
FROM python:3
RUN pip install flaskPython文件:
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)船坞-合成文件
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
server {
listen 90;
server_name localhost;
location / {
proxy_pass http://flask_webapp:5000/;
proxy_set_header Host "localhost";
}
}发布于 2020-07-17 01:13:44
首先,您需要创建桥接网络。让我们假设网络名是my_project_network。
docker network create --driver=bridge my_project_network现在我们将创建python应用程序。
index.py
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
flask==1.1.2现在将为python应用程序创建Dockerfile。
Dockerfile
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
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://flask_app:5000/;
proxy_set_header Host "localhost";
}
}现在将创建docker-compose文件。
docker-compose.yml
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现在我们完成了所有的文件。所以我们将进行码头写作。
docker-compose up --build -d要阻止它,只需使用
docker-compose stop结果

注意:您可以用所需的任何端口替换端口8080。
注意:我创建了my_project_network,可以将服务连接在码头上,组成彼此。但我不需要my_project_network就能做到。但是我更喜欢使用my_project_network将任何服务连接起来,从另一个对接者组合到这个对接者组合服务。
让我们说我们有。./anther_project/docker-compose.yml
version: "3.7"
services:
flask_app_v2:
build:
context: .
dockerfile: Dockerfile
ports:
- 5001:5001
networks:
- my_project_network
networks:
my_project_network:
external: trueflask_app_v2可以连接到redis_app,因为它们都在同一个网络中。
https://stackoverflow.com/questions/62945229
复制相似问题