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

如何使用Docker Compose配置容器仅通过代理出站、限制公网访问

需求实现结论

上述需求完全可以通过Docker Compose实现,核心通过自定义Docker网络属性+端口映射规则即可完成配置,无需额外依赖第三方工具。


具体实现思路

1. 网络分层配置

  • 自定义两个桥接网络:
    • 内部业务网络:设置internal: true属性,所有业务容器加入该网络,该网络默认禁止容器访问公网,仅允许同网络内的容器互相通信,因此业务容器只能访问同网络下监听3128端口的代理容器
    • 代理公网网络:不开启internal属性,仅代理容器加入该网络,支持公网访问
  • 代理容器同时加入上述两个网络,既可以被内部业务容器正常访问,也可以独立连通公网

2. web端口暴露配置

  • 需要向宿主机暴露web服务的业务容器,直接在Docker Compose配置中添加ports端口映射规则即可,Docker会自动处理宿主机到内部容器的流量转发,不受internal网络的公网访问限制,宿主机可以正常访问映射后的端口

参考配置示例
version: '3.8'

# 自定义网络声明
networks:
  internal-business-net:
    driver: bridge
    internal: true # 核心配置:禁止该网络内的容器直接访问公网
  proxy-public-net:
    driver: bridge

services:
  # 代理服务
  proxy:
    image: squid:latest # 可替换为任意监听3128端口的代理镜像
    networks:
      - internal-business-net
      - proxy-public-net
    restart: always

  # 普通业务容器(无需暴露端口)
  business-app1:
    image: your-app-image:v1
    networks:
      - internal-business-net
    environment:
      # 配置业务容器走代理访问公网
      - HTTP_PROXY=http://proxy:3128
      - HTTPS_PROXY=http://proxy:3128
    restart: always

  # 需暴露web端口的业务容器
  web-app:
    image: your-web-image:v1
    networks:
      - internal-business-net
    ports:
      - "8080:80" # 宿主机8080端口映射到容器的80 web端口
    environment:
      - HTTP_PROXY=http://proxy:3128
      - HTTPS_PROXY=http://proxy:3128
    restart: always

效果验证方式

执行docker compose up -d启动所有服务后即可验证:

  • 进入任意业务容器执行公网访问命令,无代理配置的请求会直接失败,走代理的请求可正常连通
  • 宿主机访问127.0.0.1:8080可正常打开web服务页面
  • 进入代理容器执行公网访问命令可正常连通

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:45:04