构建期网络为什么不走宿主代理
构建容器不继承宿主的代理设置:需要在构建时显式传入代理参数或配置内网镜像源。含凭据的代理要走构建期密钥机制,避免把账号密码写进镜像层与历史记录里。
基本信息
| 现象 | 构建过程中拉取依赖超时或被拒绝 |
|---|---|
| 手段 | 通过构建参数传代理变量,或配置内网镜像源 |
| 安全 | 代理含凭据时用密钥机制,不写进构建参数 |
| 域名解析 | 可临时指定域名与地址映射 |
| 适用范围 | 所有使用构建工具的流水线 |
典型使用场景
- 内网环境构建时依赖拉取失败
- CI 机器需要通过代理访问外部仓库
- 排查构建阶段与运行阶段网络不一致的问题
- 避免把代理凭据写进镜像历史
- 内网私有仓库的域名解析需要临时映射
传入代理与映射
传入代理与映射
docker build \
--build-arg https_proxy=http://proxy.example.com:3128 \
--build-arg http_proxy=http://proxy.example.com:3128 \
-t app:1.0 .
docker build --add-host=registry.example.com:10.0.0.20 -t app:1.0 . # 临时域名映射配置要点与风险
| 关注点 | 做法 | 风险 |
|---|---|---|
| 代理变量 | 构建期显式传入 | 可能写进镜像历史 |
| 凭据 | 用密钥机制挂载 | 写进参数会泄露 |
| 镜像源 | 配置内网源 | 需与网络策略一致 |
| 排除列表 | 配置不走代理的地址 | 漏配会让内网请求走代理 |
构建参数的值会进入镜像历史可被检出,代理含账号密码时用构建期密钥机制挂载。
宿主能联网不等于构建容器能联网,桥接网络与公司网络策略都可能拦截。
忽略排除列表会让内网仓库的请求被错误地走代理,构建内网地址失败时先查这一项。
构建阶段与运行阶段的网络策略往往不同,两者要分别验证,不要用一个环境的结论套另一个。
把代理配置写进流水线模板并注明适用环境,比每次构建临时拼参数更可靠。