docker - docker 限制容器网络访问
问题描述
我在 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 请求,因此我无法访问它。
有针对这个的解决方法吗?
解决方案
听起来您正在寻找的是内部网络。内部网络明确限制对网络的外部访问。
你如何发挥它最终取决于你如何部署你的容器。如果您使用的是 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
如果您正在寻找跨群体工作的东西,那么覆盖网络可能更适合您的需求。 根据文档:
覆盖网络驱动程序在多个 Docker 守护程序主机之间创建分布式网络。该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括 swarm 服务容器)在启用加密时安全地通信。
通过以下方式创建覆盖网络
docker network create -d overlay --attachable my-attachable-overlay
并且可以像上面提到的那样附加。
推荐阅读
- ionic-framework - 将 dom 转换为图像时隐藏 div
- rust - For循环不按顺序打印哈希图
- javascript - 解释 Javascript 中的输入
- java - 包 org.springframework.stereotype 和 org.springframework.scheduling.annotation 不存在
- javascript - 当我单击谷歌地图上的标记时,它会将地图移动到默认中心而不是显示信息窗口?
- python - PySimpleGUI 显示 URL .JPG
- pytorch - Pytorch 中的 Gloo 用于 GPU 张量集体通信
- python - 如何去除溶液中的尖峰并使用 scipy 产生平滑插值?
- flutter - 在 Web 服务器上运行时,sweepGradient 不起作用
- javascript - 在继续代码之前让机器人等待一段时间