构建期网络模式是什么
构建阶段同样需要网络:安装系统包、拉取依赖、下载二进制。--network 用来选择构建容器使用哪种网络环境,可选宿主网络、完全断网或默认的隔离网络。它的实用价值有两处:企业网络下用宿主网络绕开构建容器的代理与解析问题;需要验证镜像能否在离线环境重建时,用断网模式暴露隐藏的外部依赖。
基本信息
| 语法 | docker build --network=host|none|default -t 名称 . |
|---|---|
| 取值含义 | host 用宿主网络栈;none 无网络;default 走容器网络加地址转换 |
| 宿主网络用途 | 继承宿主的代理与 DNS 环境,绕开解析问题 |
| 断网用途 | 验证构建是否依赖外部下载 |
| 与运行期区别 | 只影响构建阶段,与容器运行时的网络配置无关 |
| 平台差异 | 桌面版环境中宿主网络指向虚拟机内部,与 Linux 行为不同 |
典型使用场景
- 企业代理环境构建失败:改用宿主网络复用宿主代理配置
- 验证离线可构建性:断网跑一遍,明确列出外部依赖
- 排查 DNS 解析异常:对比默认网络与宿主网络下的表现
- 依赖内网源(私有制品库)时确认构建容器能解析到该域名
- 排查缓存代理相关的构建差异
三种模式
三种模式
# 默认:构建容器走隔离网络,需要 DNS 与出口都正常
docker build -t app/web:1.0 .
# 宿主网络:复用宿主的解析与代理配置,企业环境常用
docker build --network=host -t app/web:1.0 .
# 断网构建:所有外部下载都会失败,用来验证镜像自给自足的程度
docker build --network=none -t app/web:1.0 .
# buildx 环境同样支持,配合 plain 日志便于观察失败步骤
docker buildx build --network=host --progress=plain -t app/web:1.0 . 2>&1 | tail -20模式选择对照
| 模式 | 网络能力 | 适用时机 |
|---|---|---|
| default | 容器网络加地址转换 | 大多数常规构建 |
| host | 继承宿主网络栈 | 企业代理与内网源环境 |
| none | 无任何网络 | 验证离线构建可行性 |
| host 加 plain | 同上并输出完整日志 | 排查网络相关失败 |
| none 失败 | 存在外部下载依赖 | 先补齐依赖再谈离线 |
桌面版环境里的宿主网络是虚拟机内部的网络,不等于你的操作系统网络;需要在构建期访问宿主上的服务时,要按平台文档提供的地址写法处理。
断网构建失败是有效信息:它精确指出哪些步骤依赖外部网络。把依赖提前下载好并放进构建上下文或制品库,是提升构建稳定性的常见做法。