我在码头上造了两个集装箱。我的这些集装箱都在同一个网络里。我想限制这些容器访问我的本地网络。
例如,;容器1可以访问整个网络。但是2号集装箱到不了任何地方,只有我才能到达。我不能在我的中央防火墙中这样做,因为所有容器的源地址都是我的停靠主机的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请求,所以我无法到达它。
有解决办法吗?
发布于 2020-09-18 10:05:35
听起来你想要的是一个内部网络。内部网络显式地限制对网络的外部访问。
如何发挥这一点最终取决于您如何部署您的容器。如果您使用的是docker,那么您需要修改docker-come.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如果您正在寻找跨团队工作的东西,那么覆盖网络可能更适合您的需要。根据文件
覆盖网络驱动程序在多个Docker守护进程主机之间创建分布式网络。该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)在启用加密时安全地通信。
覆盖网络的创建方式如下
docker network create -d overlay --attachable my-attachable-overlay并且可以和上面提到的一样附在上面。
https://stackoverflow.com/questions/63953333
复制相似问题