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

Docker容器通信限制:禁止外部容器访问内部容器,允许内部主动访问外部

你要的需求完全可以通过Debian系统的iptables实现,Docker官方提供了DOCKER-USER自定义规则链,专门用于配置容器间的访问控制,不会和Docker自动生成的转发规则冲突。

步骤1:修改docker-compose配置固定容器IP

为了避免容器重启后IP变动导致规则失效,建议新增自定义网桥并为两个容器配置静态IP,修改后的配置如下:

version: "3.9"
# 新增自定义网桥,配置固定子网
networks:
  activemq-net:
    ipam:
      config:
        - subnet: 172.20.0.0/24
services:
  activemq-external:
    image: rmohr/activemq:5.15.9
    container_name: activemq
    volumes:
      - "/Users/test/messaging/broker/broker-1/conf:/opt/activemq/conf"
    ports:
      - "61616:61616"
      - "8161:8161"
    networks:
      activemq-net:
        ipv4_address: 172.20.0.10
  activemq-internal:
    image: rmohr/activemq:5.15.9
    container_name: activemq2
    volumes:
      - "/Users/test/messaging/broker/broker-2/conf:/opt/activemq/conf"
    ports:
      - "61716:61716"
      - "7161:7161"
    networks:
      activemq-net:
        ipv4_address: 172.20.0.20

修改后执行docker-compose up -d重启容器生效。

步骤2:配置iptables规则

方案A:仅拒绝external容器到internal容器的主动入站(满足你的第一优先级需求)

两条规则即可实现:允许internal主动发起的连接的回包进入,拒绝所有external主动发往internal的新连接:

# 允许已建立连接的回包通行
iptables -I DOCKER-USER -s 172.20.0.10 -d 172.20.0.20 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 拒绝external主动发起的新连接
iptables -I DOCKER-USER -s 172.20.0.10 -d 172.20.0.20 -m conntrack --ctstate NEW -j DROP

配置后效果:external无法主动访问internal的任何端口,但internal主动访问external的请求可以正常收到响应,完全符合你模拟防火墙测试duplex连接的需求。

方案B:默认拦截internal所有入站,仅允许主动出站的回包

如果第一方案不符合你的要求,可以用以下规则实现默认禁止所有来源对internal的主动访问,仅允许internal主动发起的连接的回包:

# 允许所有已建立连接的回包进入internal
iptables -I DOCKER-USER -d 172.20.0.20 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 拒绝所有主动发往internal的新连接
iptables -I DOCKER-USER -d 172.20.0.20 -m conntrack --ctstate NEW -j DROP

步骤3:规则持久化

以上配置的iptables规则重启后会失效,执行以下操作实现持久化:

  1. 安装iptables-persistent包:apt update && apt install -y iptables-persistent
  2. 保存当前规则:iptables-save > /etc/iptables/rules.v4
    后续如果修改了规则,重新执行保存命令即可生效。

验证方法

  • 进入external容器执行ping 172.20.0.20,预期无法连通
  • 进入internal容器执行ping 172.20.0.10,预期可以正常连通
  • 也可以通过telnet测试对应端口的连通性,符合上述逻辑即为配置成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:06:02