You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker网络使容器仅支持内部及宿主机访问并禁止公网访问

Docker网络配置方案(容器内部互访+访问宿主机+禁止公网访问)

核心调整逻辑

你此前使用internal: true的自定义网络会完全隔离容器和宿主机、公网的通信,因此无法满足访问宿主机的需求,我们可以通过「普通桥接自定义网络+iptables公网拦截」的方案实现需求。

操作步骤

1. 修改自定义网络配置

删除原有配置中的internal: true属性,改为普通桥接网络:

networks:
  no-internet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.19.0.0/16

如果此前已经创建过旧的internal网络,先执行以下命令删除避免冲突:
docker network rm no-internet

2. 配置iptables规则禁止公网访问

在宿主机执行以下命令,拦截该子网所有非内部流量:
iptables -I DOCKER-USER -s 172.19.0.0/16 ! -d 172.19.0.0/16 -j DROP
规则说明:仅允许172.19.0.0/16子网内部的通信,所有发往子网外的流量都会被丢弃,自然无法访问公网,但宿主机在该网络下的网关IP(默认172.19.0.1)属于子网范围内,因此容器可以正常访问宿主机。
如果需要规则开机持久化:

  • Debian/Ubuntu系统可安装iptables-persistent包保存规则
  • CentOS/RHEL系统可使用iptables-services服务执行service iptables save保存规则

3. 配置host.docker.internal解析

自定义网络默认不会自动生成宿主机域名解析,在你的服务配置中添加extra_hosts即可:

services:
  你的服务名称:
    networks:
      - no-internet
    extra_hosts:
      - "host.docker.internal:host-gateway"
    # 其余服务配置保持不变

效果验证

  • 容器内部互访:同网络下的容器可通过服务名正常通信
  • 访问宿主机:容器内可ping通host.docker.internal,XDebug配置指向该域名即可正常连接宿主机
  • 公网访问限制:容器内ping公网域名/IP会超时,无法访问互联网

内容的提问来源于stack exchange,提问作者joels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:54:02