临时禁用Docker上的暴露端口

我想临时禁用一些docker容器的端口在runitme,所以没有改变图像或停止/启动容器。

我有一些服务运行,一个web客户端,一个authentication服务一个mongodb实例,还有一个负载均衡器,他们都在同一个虚拟机。

由于在Docker中没有API在运行时修改暴露端口,所以我必须使用iptables命令。

所以我已经build立了一些代码,禁用与作为parameter passing的特定容器名称相关的端口。

我有以下规则的authentication服务器:

 -DOCKER -d 172.18.0.16/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 8081 -j ACCEPT

我的代码修改如下:

 -DOCKER -d 172.18.0.16/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 8081 -j DROP

在这一点上,我期待着我无法再authentication,但我仍然可以做到。

同时,如果对负载平衡器尝试相同的代码,一切工作正常,我不能按预期访问URL。

这些原始的nginx规则:

 -DOCKER -d 172.18.0.11/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 81 -j ACCEPT
 -DOCKER -d 172.18.0.11/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 80 -j ACCEPT
 -DOCKER -d 172.18.0.11/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 443 -j ACCEPT

这里修改的:

 -DOCKER -d 172.18.0.11/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 81 -j DROP
 -DOCKER -d 172.18.0.11/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 80 -j DROP
 -DOCKER -d 172.18.0.11/32!  -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 443 -j DROP

在docker ps命令的输出之下

 [root @ sandbox-test-28〜]#docker ps 
容器ID图像命令创build状态端口名称
 d007479faaf4 service-auth-nodejs“/ bin / sh -c \”/ usr / bin“2天前最多2天0.0.0.0:8081->8081/tcp authentication-microservice
 c073989b49ce nginx“/ bin / bash -c / etc / ng”2 days ago Up 2 days 0.0.0.0:443->443/tcp,0.0.0.0:9000->80/tcp,0.0.0.0:10000->81 / tcp nginx-microservice
 432ea895d90a web“/ bin / sh -c \”/ usr / bin“2天前上载2天0.0.0.0:8000->8000/tcp webclient-microservice
 0c8141da8c0b mongo“/entrypoint.sh mongo”2天前最多2天0.0.0.0:27017->27017/tcp mongo-microservice
 [root @ sandbox-test-28〜]# 

我错过了什么吗?

你的规则中的子网是不同的:

172.18.0.11/32 (authentication service) 

VS

 172.18.0.16/32 (nginx) 

所以大概,你的validation服务器的数据包通过172.18.0.16到达,仍然允许一个不同的规则。