我在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请求,因此我无法到达它。
对此有解决方案吗?
答案 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
并且可以与上面提到的相同。