当前位置: 首页 > article >正文

Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置

错误Dockerfile配置示例:

FROM python:3.11 as buildENV http_proxy=http://172.17.0.1:7890
ENV https_proxy=http://172.17.0.1:7890WORKDIR /appENV 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 releaseCOPY . .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 releaseWORKDIR /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: ./backenddockerfile: Dockerfileargs:http_proxy: http://172.17.0.1:7890https_proxy: http://172.17.0.1:7890ports:- "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 /appENV 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 releaseCOPY . .# 🔥 禁用运行阶段的代理(即使有也强行覆盖为空)
ENV http_proxy=""
ENV https_proxy=""CMD ["python", "main.py"]

docker-compose.yaml文件配置(完整版):

version: '3.8'services:qdrant:image: qdrant/qdrant:latestcontainer_name: qdrantports:- 6333:6333- 6334:6334networks:- ragsaas-networkmongodb:image: mongo:latestcontainer_name: mongodbports:- 27017:27017environment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: passwordnetworks:- ragsaas-networkvolumes:- mongodb_data:/data/dbarizephoenix:image: arizephoenix/phoenix:latestcontainer_name: arizephoenixports:- '6006:6006'- '4317:4317'networks:- ragsaas-networkbackend:build:context: ./backenddockerfile: Dockerfileargs:http_proxy: http://172.17.0.1:7890https_proxy: http://172.17.0.1:7890image: ragsaas/backend:latestcontainer_name: backendports:- '8000:8000'environment:# MongoDB ConfigurationMONGODB_NAME: RAGSAASMONGODB_URI: mongodb://admin:password@mongodb:27017/# Qdrant ConfigurationQDRANT_COLLECTION: defaultQDRANT_URL: http://qdrant:6333# QDRANT_API_KEY:OPENAI_API_KEY:# Backend Application ConfigurationMODEL_PROVIDER: openaiMODEL: gpt-4o-miniEMBEDDING_MODEL: text-embedding-3-smallEMBEDDING_DIM: 1536# FILESERVER_URL_PREFIX: http://backend:8000/api/filesFILESERVER_URL_PREFIX: http://159.75.85.9:8000/api/filesSYSTEM_PROMPT: 'You are a helpful assistant who helps users with their questions.'APP_HOST: 0.0.0.0APP_PORT: 8000ADMIN_EMAIL: admin@ragsaas.comADMIN_PASSWORD: ragsaasJWT_SECRET_KEY: secret123JWT_REFRESH_SECRET_KEY: secret123ARIZE_PHOENIX_ENDPOINT: http://arizephoenix:6006depends_on:- qdrant- mongodb- arizephoenixnetworks:- ragsaas-networkfrontend:build:context: ./frontenddockerfile: Dockerfileargs:HTTP_PROXY: http://172.17.0.1:7890HTTPS_PROXY: http://172.17.0.1:7890http_proxy: http://172.17.0.1:7890https_proxy: http://172.17.0.1:7890image: ragsaas/frontend:latestcontainer_name: frontendports:- '3000:3000'environment:# NEXT_PUBLIC_SERVER_URL: http://backend:8000# NEXT_PUBLIC_CHAT_API: http://backend:8000/api/chatNEXT_PUBLIC_SERVER_URL: http://159.75.85.9:8000NEXT_PUBLIC_CHAT_API: http://159.75.85.9:8000/api/chatHOST: 0.0.0.0  # 👈 关键配置,告诉 nextjs 启动时监听所有地址depends_on:- backendnetworks:- ragsaas-networknetworks:ragsaas-network:name: ragsaas-networkdriver: bridgevolumes:mongodb_data:
http://www.lryc.cn/news/2398119.html

相关文章:

  • Docker 镜像深度剖析:构建、管理与优化
  • 使用 Flutter 开发 App 时,想要根据 Figma 设计稿开发出响应式 UI 界面
  • Flink2.0及Flink-operater在K8S上部署
  • PH热榜 | 2025-06-03
  • 论文略读: STREAMLINING REDUNDANT LAYERS TO COMPRESS LARGE LANGUAGE MODELS
  • mapbox高阶,生成并加载等时图
  • 深入剖析物联网边缘计算技术:架构、应用与挑战
  • DeepSeek眼中的文明印记:山海经
  • 在Mathematica中实现Newton-Raphson迭代
  • 【Ragflow】25.Ragflow-plus开发日志:excel文件解析新思路/公式解析适配
  • Python数据可视化科技图表绘制系列教程(一)
  • 移除3D对象的某些部分点云
  • 阿里云为何,一个邮箱绑定了两个账号
  • 高效视频倍速播放插件推荐
  • 无他相机:专业摄影,触手可及
  • 基于贝叶斯优化神经网络的光伏功率预测综述
  • 【C++11】折叠引用和完美转发
  • 数据结构:递归:自然数之和
  • 网易 - 灵犀办公文档
  • 【C++】模板与特化技术全面教程(claude sonnet 4)
  • ABAP设计模式之---“高内聚,低耦合(High Cohesion Low Coupling)”
  • RagFlow优化代码解析(一)
  • 【python与生活】用 Python 从视频中提取音轨:一个实用脚本的开发与应用
  • 深度强化学习赋能城市消防优化,中科院团队提出DRL新方法破解设施配置难题
  • 云原生周刊:探索 Gateway API v1.3.0
  • 008房屋租赁系统技术揭秘:构建智能租赁服务生态
  • Python训练打卡Day41
  • spring-boot-admin实现对微服务监控
  • Linux 权限管理入门:从基础到实践
  • Mycat的监控