码头工人限制容器网络访问

时间:2020-09-18 09:46:15

标签: docker iptables portainer

我在docker上创建了2个容器。我的这些容器位于同一网络中。我想限制这些容器访问我的本地网络。

例如; ;容器1可以访问我的整个网络。但是容器2无法到达任何地方,只有我可以访问它。 我无法从中央防火墙执行此操作,因为所有容器的源地址都是Docker主机的IP地址。

我尝试用iptables做到这一点。我为容器1添加了以下规则:

iptables -I DOCKER-USER -s 172.17.0.2 -j ACCEPT

我为容器2添加了以下规则:

iptables -I DOCKER-USER -s 172.17.0.4 -j DROP

执行此操作时,容器1可以访问我的网络,容器2无法访问我的网络。这就是我要的。但是这样,容器2无法响应我的TCP请求,因此我无法到达它。

对此有解决方案吗?

1 个答案:

答案 0 :(得分:0)

听起来您正在寻找的是内部网络。内部网络明确限制了外部对网络的访问。

如何发挥作用最终取决于您如何部署容器。如果您使用的是docker-compose,则需要修改docker-compose.yml文件,使其看起来像这样:

version: '2'
services:
  app1:
    image: mysql:5.7
    networks:
      - network1 
        
  app2:
    image: someImage
    networks:
      - network1
      - network2
networks:
  network1:
    internal: true
  network2:

如果您正在通过命令行,那么您将创建一个像这样的网络:

docker network create -d overlay --internal myprivatenetwork

然后以这种方式将其附加到您的容器中:

docker network connect myprivatenetwork app1

如果您正在寻找可以跨群工作的东西,那么覆盖网络可能会更适合您的需求。 Per the documentation

覆盖网络驱动程序在其中创建一个分布式网络 多个Docker守护程序主机。该网络位于(重叠)的顶部 特定于主机的网络,允许将容器连接到该主机 (包括群服务容器)在以下情况下进行安全通信 启用加密。

以以下方式创建覆盖网络

docker network create -d overlay --attachable my-attachable-overlay

并且可以与上面提到的相同。