You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代理缓存并复用构建脚本执行期间下载的二进制文件

Docker构建依赖缓存方案调整说明

核心失效原因

  • 你当前使用的Nginx默认是反向Web服务器,不支持正向代理的流量缓存逻辑,你测试时收到的301状态码是Nginx默认的重定向规则,并未实际走代理转发流程,所以不符合缓存需求。
  • Docker镜像构建阶段默认使用独立的bridge网络,和你docker-compose启动的Nginx容器网络不互通,你配置的0.0.0.0:8080是构建容器的本地地址,无法访问到同编排下的代理服务。
  • 普通代理配置无法直接缓存HTTPS流量的内容,TLS加密状态下代理只能识别访问域名,无法获取具体请求的资源信息,无法做内容匹配缓存。

现有架构调整方案

1. 替换代理组件

Nginx不适合做正向缓存代理,换成自带正向代理+磁盘缓存能力的Squid即可,配置更简单,对二进制文件缓存的适配性更好。

2. 调整docker-compose配置

提前启动代理容器,配置host网络模式让构建阶段可以直接访问代理端口,docker-compose参考配置如下:

services:
  业务镜像:
    build:
      context: .
      network: host
      args:
        - http_proxy=http://127.0.0.1:8080
        - https_proxy=http://127.0.0.1:8080
  squid-proxy:
    image: sameersbn/squid:latest
    ports:
      - "8080:3128"
    volumes:
      - ./squid-cache:/var/spool/squid
      - ./squid.conf:/etc/squid/squid.conf

3. 配置Squid缓存规则

在squid.conf中加入以下配置即可实现全量资源磁盘缓存,缓存大小、有效期可自行调整:

http_port 3128
cache_dir ufs /var/spool/squid 10000 16 256
maximum_object_size 1024 MB
cache allow all
http_access allow all

如果需要缓存HTTPS资源,给Squid配置SSL根证书,将证书导入到业务镜像的系统根证书信任列表,即可解密HTTPS流量做内容缓存。

更轻量的替代方案(无需搭建代理)

如果仅用于缓存构建过程的依赖和产物,还有更简单的实现方式:

  • 用Docker原生的RUN --mount=type=cache语法,将依赖下载目录挂载为Docker全局缓存卷,比如npm的/root/.npm、maven的/root/.m2、apt的/var/cache/apt/archives,示例Dockerfile写法:
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    apt update && apt install -y nginx
  • 频繁下载的二进制文件提前存到内部文件服务,构建时优先从内部地址拉取,避免重复公网下载。
  • 数据库内容构建产物可单独打包为基础镜像,业务镜像直接基于该基础镜像构建,无需每次构建都重新初始化数据库内容。

内容的提问来源于stack exchange,提问作者Lubomir Gospodinov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:00:02