我想使用docker来包装nginx,fastapi和2个streamlit应用程序。所有3个应用程序(fastapi,2streamlight应用程序)都不能相互交互。Nginx应该可以作为这3个应用的反向代理。对于fastapi来说,它是有效的。我可以向http://ip:80/twxservices发送rest-api请求。"twxservices“作为端点添加到app.py文件中,而不是添加到nginxconfig中。
无法通过此http://ip:80/stream1和http://ip:80/stream2访问streamlit应用程序我收到错误: 404: not found
提前感谢您的帮助。在下面找到文件结构和配置文件。这是文件结构和反向代理的工作方式:


docker-compose文件:
services:
web:
build:
context: ./nginxfolder
dockerfile: Dockerfile
container_name: web
ports:
- 80:80
networks:
- my-network
depends_on:
- app
app:
build:
context: ./twxservicesfolder
dockerfile: Dockerfile
container_name: app
networks:
- my-network
spectrum:
build:
context: ./spectrumfolder
dockerfile: Dockerfile
container_name: spectrum
networks:
- my-network
dgraph:
build:
context: ./dgraphfolder
dockerfile: Dockerfile
container_name: dgraph
networks:
- my-network
networks:
my-network:
driver: bridgenginx配置(default.conf):
upstream fastapi-backend {
server app:8000;
}
server {
listen 80;
location / {
proxy_pass http://fastapi-backend;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
client_body_buffer_size 100M;
client_max_body_size 100M;
}
location /stream1 {
proxy_pass http://spectrum:8501/stream1;
}
location ^~ /stream1/static {
proxy_pass http://spectrum:8501/stream1/static/;
}
location ^~ /stream1/healthz {
proxy_pass http://spectrum:8501/stream1/healthz;
}
location ^~ /stream1/vendor {
proxy_pass http://spectrum:8501/stream1/vendor;
}
location /stream1/spectrum {
proxy_pass http://spectrum:8501/stream1/spectrum;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
location /stream2 {
proxy_pass http://dgraph:8503/stream2;
}
location ^~ /stream2/static {
proxy_pass http://dgraph:8503/stream2/static/;
}
location ^~ /stream2/healthz {
proxy_pass http://dgraph:8503/stream2/healthz;
}
location ^~ /stream2/vendor {
proxy_pass http://dgraph:8503/stream2/vendor;
}
location /stream2/dgraph {
proxy_pass http://dgraph:8503/stream2/dgraph;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}Dockerfile nginx容器:
FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.dDockerfile streamlit应用程序dgraph容器:
FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
EXPOSE 8503
COPY app2.py /var/dashboard/app2.py
CMD streamlit run /var/dashboard/app2.py --server.address="0.0.0.0" --server.port="8503" Dockerfile streamlit应用频谱容器:
FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
EXPOSE 8501
COPY app1.py /var/dashboard/app1.py
CMD streamlit run /var/dashboard/app1.py --server.address="0.0.0.0" --server.port="8501" Dockerfile fastapi app twxservices容器:
FROM python:3.8-slim-buster
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
ENV PYTHONUNBUFFERED 1
EXPOSE 8000
CMD ["uvicorn","app:app","--proxy-headers","--host","0.0.0.0","--forwarded-allow-ips","*"]发布于 2021-11-17 11:23:57
我用这些nginx配置让它工作
location /spectrum {
proxy_pass http://spectrum1:8501/spectrum;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}streamlit应用程序的Dockerfile配置如下:
FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
EXPOSE 8501
COPY app1.py /var/dashboard/app1.py
CMD streamlit run /var/dashboard/app1.py --server.address="0.0.0.0" --server.port="8501" --server.baseUrlPath="spectrum" --server.enableCORS=false --server.enableXsrfProtection=falsehttps://stackoverflow.com/questions/69979818
复制相似问题