使用iptables动态映射Docker容器端口
0x0. 安装 telnet
telnet 介绍:https://zh.wikipedia.org/wiki/Telnet
本文用于测试指定端口是否开放,命令如下:
1 | telnet [ip] [port] |
参数解释:
- ip:ip 地址
- port:端口
如果指定端口开放则结果如下:
如果指定端口未开放则结果如下:
PS:可以通过快捷键 ctrl+]退出连接,然后输入 q 退出 telnet
0x1. 安装 Docker
Docker 官方安装文档:https://docs.docker.com/engine/install/
0x2. 实战
目标:开放 js-redis 容器的 443 端口
如下图所示,容器名称为 js-redis,仅映射了 6378 => 6379
使用以下命令进行动态映射 Docker 容器的端口
1 | iptables -t nat -A DOCKER -p tcp --dport ${宿主机端口} -j DNAT --to-dest ${容器ip}:${容器端口} |
我们映射 js-redis 容器的 8081 => 8082
1 | iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-dest 172.18.0.4:8082 |
补充:
- iptables 其他常用命令:
- 列出 Dcoker 已设置的规则,带行号
1 | iptables -t nat -vnL DOCKER --line-number |
- 根据行号删除规则
1 | iptables -t nat -D DOCKER 3 |
- 查看容器 ip 命令
1 | docker inspect [容器id或者容器名称] | grep IPAddress |