--network none 是创建完全离线容器的最简方案,仅保留 lo 回环接口,不分配 IP、不配置网关、不挂载外部网络设备,实现内核级网络隔离,适用于密码生成、离线计算等高安全场景。

直接用 --network none 就能创建完全不联网的容器,不需要改 Docker Desktop 设置、也不依赖宿主机网络状态。
docker run --network none 是最简方案
这个参数让容器只保留 lo 回环接口,不分配 IP,不配置网关,不挂载任何外部网络设备。它和宿主机、其他容器、互联网彻底断开,连 DNS 查询都发不出去。
常见错误现象:有人误以为“不拉镜像”或“不配端口映射”就等于不联网——其实只要没加 --network none,容器默认走 bridge 网络,仍会通过 Docker 的虚拟网桥尝试通信。
- 正确命令:
docker run --network none -it alpine sh - 验证方式:进容器后执行
ip a,只看到lo;执行ping 127.0.0.1可通,ping 8.8.8.8直接报Network is unreachable - 注意:该模式下
-p(端口映射)和--link无效,因为根本不存在网络栈
Docker Desktop 的 network create 不适合无网场景
很多人看到 docker network create --driver bridge isolated_network 就想照搬,但在 Docker Desktop(尤其是 Windows/macOS)上,自定义桥接网络底层仍依赖 WSL2 或 HyperKit 的虚拟网络栈,即使你删掉路由规则,容器启动时仍会自动获得一个 IP 并尝试初始化网络命名空间——这和 none 模式“从源头掐断”的思路完全不同。
使用场景:只有当你需要多个容器之间互通、但又不想暴露到宿主机网络时,才用自定义 bridge;纯离线计算、密码生成、本地文件批量处理等任务,--network none 更干净、更可控。
- 别在 Docker Desktop 里折腾
docker network create配合--network来模拟无网——它做不到真正的隔离 -
none是内核级限制,bridge是用户态网络模拟,二者隔离强度不在一个量级
docker-compose.yml 里怎么写无网络配置
Compose 文件里不能只写 network_mode: "none" 就完事,必须同时禁用所有可能触发网络行为的字段。
容易踩的坑:如果写了 ports、expose、depends_on 或 networks 块,Docker Compose 会忽略 network_mode 并 fallback 到默认桥接网络。
- 正确写法:
version: '3.8' services: offline-worker: image: alpine:latest network_mode: "none" command: ["sh", "-c", "echo 'no network'; sleep 3600"] - 错误写法:
networks: [default]或ports: ["8080:80"]会直接覆盖network_mode - Mac/Windows 用户注意:Docker Desktop 的 Compose 实现对
network_mode支持稳定,但旧版(v4.25 之前)在 WSL2 后端下偶有缓存问题,重启 Docker Desktop 可解决
真正难的不是加个 --network none,而是确认容器里跑的程序不会因“查不到 /etc/resolv.conf”或“getaddrinfo 失败”而崩溃——有些工具(比如老版本 curl)默认强制做 DNS 解析,哪怕你只传 IP 地址。这种时候得配合 --dns 127.0.0.1 或程序自身参数绕过,而不是换网络模式。


















