docker容器启动后添加端口映射

列出容器

docker ps -a

在这里插入图片描述
上图可以看到,容器运行时已经映射了2个端口,22223到22,33307到3306。

根据上图可看到containerId 为 72cdd9f1fa32。
通过inspect命令查看容器ip:docker inspect containerId | grep IPAddress

docker inspect 72cdd9f1fa32| grep IPAddress

在这里插入图片描述

下面将如何演示如何将宿主的8081端口映射到172.17.0.2的8080端口上去

1、查看NAT表中的PREROUTING链

sudo iptables -t nat --list-rules PREROUTING

在这里插入图片描述

如果没有上图第三行,执行以下命令,iptables将满足条件的数据都会转发到DOCKER链

sudo iptables -t nat -A PREROUTING -p tcp -m addrtype --dst-type LOCAL -j DOCKER

2、查看NAT表中的DOCKER链

sudo iptables -t nat --list-rules DOCKER

在这里插入图片描述
仿照上图添加一条自己的映射规则,将宿主的8081端口映射到172.17.0.2的8080端口上去

sudo iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080

3、查看NAT表中的POSTROUTING链

sudo iptables -t nat --list-rules POSTROUTING

在这里插入图片描述
仿照上图中的规则,书写的规则如下:

sudo iptables -t nat -A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 8080 -j MASQUERADE

4、查看FILTER表中的DOCKER链

sudo iptables --list-rules DOCKER

在这里插入图片描述
仿照上图中的规则,书写的规则如下:

sudo iptables -t filter -A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8080 -j ACCEPT

验证端口映射是否成功

在vscode中使用spring boot编写hello world,项目结构如下:
在这里插入图片描述一定要主要controller文件夹位置,放错地方容易404。
右键点击HelloWorldApplication.java,选择Run Java,即可启动服务。
根据上图可以得出docker容器内的访问网址:

http://172.17.0.2:8080/test/hello

我的docker部署在内网IP:192.168.9.151的服务器上。
在另外一台电脑上访问如下网址:

http://192.168.9.151:8081/test/hello

在这里插入图片描述
根据上图,可以看到端口映射成功。

移除端口映射

测试完成后想移除端口映射,需要将前面2、3、4部分在iptables上添加的规则移除,将-A换成-D即可。具体命令如下:

sudo iptables -t nat -D DOCKER ! -i docker0 -p tcp -m tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080

sudo iptables -t nat -D POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 8080 -j MASQUERADE

sudo iptables -t filter -D DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8080 -j ACCEPT
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值