错误Dockerfile配置示例:
FROM python:3.11 as build
ENV http_proxy=http://172.17.0.1:7890
ENV https_proxy=http://172.17.0.1:7890
WORKDIR /app
ENV PYTHONPATH=/app
# Install Poetry
# RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python && \
# cd /usr/local/bin && \
# ln -s /opt/poetry/bin/poetry && \
# poetry config virtualenvs.create false
# 安装 poetry:稳定方式
RUN apt-get update && apt-get install -y curl python3 python3-pip && \
pip install --no-cache-dir poetry && \
poetry config virtualenvs.create false
# Install Chromium for web loader
# Can disable this if you don't use the web loader to reduce the image size
RUN apt update && apt install -y chromium chromium-driver
# Install dependencies
COPY ./pyproject.toml ./poetry.lock* /app/
RUN poetry install --no-root --no-cache --only main
# ====================================
FROM build as release
COPY . .
CMD ["python", "main.py"]
我这个配置文件应该如何修改
这里的 Dockerfile
使用了多阶段构建(build
阶段 → release
阶段),把代理设置在了 build
阶段的 ENV
中,但是这些设置会 默认被继承到下一阶段 release
中,导致运行时容器也在使用代理,从而触发 502 错误。
✅ 修改目标
- 保持构建阶段使用代理(加速拉包等)✅
- 确保运行阶段彻底清除代理(避免服务请求失败)✅
✅ 推荐修改后的 Dockerfile
# ============ 第一阶段:构建阶段(使用代理) =============
FROM python:3.11 as build
# 传入构建参数(docker-compose.yml 或 docker build --build-arg)
ARG http_proxy
ARG https_proxy
# 设置构建阶段使用代理
ENV http_proxy=${http_proxy}
ENV https_proxy=${https_proxy}
WORKDIR /app
ENV PYTHONPATH=/app
# 安装 Poetry 和依赖
RUN apt-get update && apt-get install -y curl python3 python3-pip && \
pip install --no-cache-dir poetry && \
poetry config virtualenvs.create false
# 安装 Chromium(用于网页加载器)
RUN apt update && apt install -y chromium chromium-driver
# 安装依赖(从缓存中尽量复用)
COPY ./pyproject.toml ./poetry.lock* /app/
RUN poetry install --no-root --no-cache --only main
# ============ 第二阶段:运行阶段(干净无代理) =============
FROM python:3.11 as release
WORKDIR /app
ENV PYTHONPATH=/app
# 复制 build 阶段的包
COPY --from=build /usr/local /usr/local
COPY --from=build /app /app
# 🔥 禁用运行阶段的代理(即使有也强行覆盖为空)
ENV http_proxy=""
ENV https_proxy=""
CMD ["python", "main.py"]
✅ 配套修改 docker-compose.yml(传入构建代理)
services:
backend:
build:
context: ./backend
dockerfile: Dockerfile
args:
http_proxy: http://172.17.0.1:7890
https_proxy: http://172.17.0.1:7890
ports:
- "8000:8000"
# ❌ 不要加 environment: 传 proxy 给运行阶段
✅ 检查是否生效
可以运行后进入容器测试:
docker-compose exec backend sh
printenv | grep -i proxy
结果应为:
http_proxy=
https_proxy=
说明运行阶段没有使用代理 ✅。
✅ 总结:关键改动点
位置 | 改动内容 | 原因 |
---|---|---|
build 阶段 | 用 ARG + ENV 设置代理 | 仅限构建用 |
release 阶段 | 不要继承代理,并显式清除 | 避免运行阶段失败 |
docker-compose.yml | 仅传 build.args ,不设置 environment | 控制代理作用范围 |
后端目录中Dockerfile文件配置示例(完整+正确版):
# ============ 第一阶段:构建阶段(使用代理) =============
FROM python:3.11 as build
# 传入构建参数(docker-compose.yml 或 docker build --build-arg)
ARG http_proxy
ARG https_proxy
# 设置构建阶段使用代理
ENV http_proxy=${http_proxy}
ENV https_proxy=${https_proxy}
WORKDIR /app
ENV PYTHONPATH=/app
# Install Poetry
# RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python && \
# cd /usr/local/bin && \
# ln -s /opt/poetry/bin/poetry && \
# poetry config virtualenvs.create false
# 安装 poetry:稳定方式
RUN apt-get update && apt-get install -y curl python3 python3-pip && \
pip install --no-cache-dir poetry && \
poetry config virtualenvs.create false
# Install Chromium for web loader
# Can disable this if you don't use the web loader to reduce the image size
RUN apt update && apt install -y chromium chromium-driver
# 安装依赖(从缓存中尽量复用)
COPY ./pyproject.toml ./poetry.lock* /app/
RUN poetry install --no-root --no-cache --only main
# ====================================
FROM build as release
COPY . .
# 🔥 禁用运行阶段的代理(即使有也强行覆盖为空)
ENV http_proxy=""
ENV https_proxy=""
CMD ["python", "main.py"]
docker-compose.yaml文件配置(完整版):
version: '3.8'
services:
qdrant:
image: qdrant/qdrant:latest
container_name: qdrant
ports:
- 6333:6333
- 6334:6334
networks:
- ragsaas-network
mongodb:
image: mongo:latest
container_name: mongodb
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
networks:
- ragsaas-network
volumes:
- mongodb_data:/data/db
arizephoenix:
image: arizephoenix/phoenix:latest
container_name: arizephoenix
ports:
- '6006:6006'
- '4317:4317'
networks:
- ragsaas-network
backend:
build:
context: ./backend
dockerfile: Dockerfile
args:
http_proxy: http://172.17.0.1:7890
https_proxy: http://172.17.0.1:7890
image: ragsaas/backend:latest
container_name: backend
ports:
- '8000:8000'
environment:
# MongoDB Configuration
MONGODB_NAME: RAGSAAS
MONGODB_URI: mongodb://admin:password@mongodb:27017/
# Qdrant Configuration
QDRANT_COLLECTION: default
QDRANT_URL: http://qdrant:6333
# QDRANT_API_KEY:
OPENAI_API_KEY:
# Backend Application Configuration
MODEL_PROVIDER: openai
MODEL: gpt-4o-mini
EMBEDDING_MODEL: text-embedding-3-small
EMBEDDING_DIM: 1536
# FILESERVER_URL_PREFIX: http://backend:8000/api/files
FILESERVER_URL_PREFIX: http://159.75.85.9:8000/api/files
SYSTEM_PROMPT: 'You are a helpful assistant who helps users with their questions.'
APP_HOST: 0.0.0.0
APP_PORT: 8000
ADMIN_EMAIL: admin@ragsaas.com
ADMIN_PASSWORD: ragsaas
JWT_SECRET_KEY: secret123
JWT_REFRESH_SECRET_KEY: secret123
ARIZE_PHOENIX_ENDPOINT: http://arizephoenix:6006
depends_on:
- qdrant
- mongodb
- arizephoenix
networks:
- ragsaas-network
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
HTTP_PROXY: http://172.17.0.1:7890
HTTPS_PROXY: http://172.17.0.1:7890
http_proxy: http://172.17.0.1:7890
https_proxy: http://172.17.0.1:7890
image: ragsaas/frontend:latest
container_name: frontend
ports:
- '3000:3000'
environment:
# NEXT_PUBLIC_SERVER_URL: http://backend:8000
# NEXT_PUBLIC_CHAT_API: http://backend:8000/api/chat
NEXT_PUBLIC_SERVER_URL: http://159.75.85.9:8000
NEXT_PUBLIC_CHAT_API: http://159.75.85.9:8000/api/chat
HOST: 0.0.0.0 # 👈 关键配置,告诉 nextjs 启动时监听所有地址
depends_on:
- backend
networks:
- ragsaas-network
networks:
ragsaas-network:
name: ragsaas-network
driver: bridge
volumes:
mongodb_data: