核心是创建--internal的自定义bridge网络:docker network create --subnet=192.168.100.0/24 --gateway=192.168.100.1 --internal myisolated,docker自动插入iptables drop规则阻断外发流量,实现容器间互通但禁止访问外网的原生轻量隔离。

在 Docker 中配置自定义网络网关实现内外网隔离,核心是创建一个 --internal 的自定义 bridge 网络,并配合子网与网关参数控制流量走向。它不依赖外部防火墙或复杂插件,原生支持、轻量可靠。
创建带网关的内部网络
使用 docker network create 指定子网、网关,并启用 --internal 参数,即可禁止该网络内所有容器访问外网(包括宿主机外网接口和互联网):
docker network create --subnet=192.168.100.0/24 --gateway=192.168.100.1 --internal myisolated- 该命令会创建一个仅允许容器间通信的私有局域网:容器可互相通过名字或 IP 访问,但无法 ping 通宿主机的
eth0、无法访问8.8.8.8,也无法主动发起对外 HTTP 请求 -
--internal是关键——Docker 会在 iptables 的FORWARD链中自动插入 DROP 规则,阻断该网络向外转发流量
让容器接入并验证隔离效果
启动容器时显式指定该网络,确保其完全运行在隔离环境中:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
docker run -d --name db --network myisolated --ip 192.168.100.10 mysql:8-
docker run -it --network myisolated alpine sh -c "ping -c 3 192.168.100.10 && ping -c 3 8.8.8.8"→ 前者成功,后者超时 - 若需从宿主机调试,可用
docker exec -it <container> sh</container>进入后检查路由:ip route显示默认网关为192.168.100.1,但无通往宿主机外网的路径
需要有限出站时的补充方案
如果某些容器需安全地访问特定外部服务(如时间服务器、内部 API),可在 --internal 网络基础上做精准放行:
- 用
iptables在宿主机上添加 SNAT 或白名单规则,例如只允许访问10.1.2.0/24内网段 - 避免用
docker network connect把容器同时加入 internal 和 bridge 网络——这会绕过隔离,失去意义 - 如必须出站,更推荐将出口能力集中到一个代理容器(如 squid 或 nginx),其他容器只与它通信,由它统一管控外发请求
查看与排错要点
确认配置生效,重点关注网络属性和容器实际行为:
-
docker network inspect myisolated→ 查看Internal字段是否为true,IPAM.Config是否含正确Subnet和Gateway -
sudo iptables -t filter -L DOCKER-USER -n→ 检查是否有类似REJECT all -- 192.168.100.0/24 0.0.0.0/0的拦截规则 - 容器内执行
cat /proc/sys/net/ipv4/ip_forward应为0(说明未开启转发),进一步保障隔离性










