首页/云/Docker 容器速查/internal 网络:无外网出口的隔离网络
网络与存储52 条

internal 网络:无外网出口的隔离网络

创建时加 --internal 的网络没有默认路由到外网:容器之间可互通,访问互联网被阻断,常用于数据库等不接触外网的服务。

Docker 容器速查云更新于 2026-10-13

没有外网出口的网络

docker network create --internal 创建的网络不给容器配置到外网的默认路由:接进来的容器彼此可以互通,访问互联网或宿主以外的地址会被阻断。它给的是网络层的出网隔离,适合数据库、缓存、内部管理接口这类本来就不需要外联的服务;但要注意它并不阻止容器之间的横向访问,安全效果仍要配合认证与最小权限使用。

基本信息

语法docker network create --internal 网络名
行为容器间互通,无外网出口
验证容器内请求外网应超时,解析同网容器名正常
常见组合需要外联的服务再接一张普通网络

典型使用场景

  • 数据库隔离:只在内部网络暴露,减少被外部直接触达的面
  • 防止意外外联:避免中间件在启动时自动上报或联网更新
  • 数据流向收敛:把内部服务集中到一张无出口网络,出入只走指定网关容器
  • 合规要求落地:对不需要外联的服务做网络级隔离,便于核查
  • 测试环境约束:防止测试代码误连生产或外网接口

创建与验证

创建与验证
# 创建无外网出口的网络
docker network create --internal db-net

# 数据库接入该网络
docker run -d --network db-net --name db postgres:16-alpine

# 验证同网内按名解析正常
docker run --rm --network db-net alpine getent hosts db

# 验证没有外网出口,请求应当超时或失败
docker run --rm --network db-net alpine sh -c 'nc -z -w 2 223.5.5.5 53; echo rc=$?'

# 需要外联的应用同时接两张网络
docker network connect db-net api

网络模式出网对照

网络模式外网访问容器间按名解析
默认 bridge可用,经宿主 NAT 转发不支持按容器名解析
用户自定义网络可用,经宿主 NAT 转发支持
--internal 网络不可用支持
host与宿主一致不适用(共享宿主网络栈)
需要拉镜像、装依赖的服务不要只接 internal 网络:构建阶段与运行阶段的网络需求要分开规划,运行期隔离不影响构建期。
internal 网络里的服务如果同时接了普通网络,出网方向以后者为准,隔离效果取决于有多少张网络同时接入。

易错点

  • 把业务容器整体接进 internal:表现为装依赖与外联全超时,报错指向网络而不是权限,容易排查偏方向
  • 误以为内网就安全:同网容器之间没有任何隔离,横向移动仍然通畅,认证与最小权限不能少
  • 忘记同时接第二张网络:需要的出网能力缺失,服务启动就会失败,网络字段要整体检查
  • 依赖 internal 做防勒索:它只控制路由,不控制数据读写权限,备份与只读挂载仍需单独设计

数据来源与参考

  • Docker 官方 CLI 参考:docker network create --internal(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌