一、背景
在創建容器的時候,我們可以使用命令 docker container run -p host:container container-name 的方式來綁定端口,還可以使用docker-compose.yml文件來綁定端口。有時會有一個需求:在已經創建的容器上添加容器端口與主機端口的綁定,這時可以使用iptables命令來動態綁定端口,而不用重新創建容器。
二、使用iptables動態綁定端口
1、查看容器ip
docker inspect <container-name | id> | grep IPAddress
這一步后會輸出容器的ip地址,端口綁定時會使用。
2、端口綁定
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport hostport -j DNAT --to-destination containerip:port
舉個例子,使用命令
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9030 -j DNAT --to-destination 172.22.0.2:9090
將容器的9090端口和宿主機的9030端口綁定了起來,其中172.22.0.2是容器的ip地址。
3、保存規則
sudo iptables-save
4、查看動態綁定的端口
docker port <container-name | id> 不能查看使用iptables綁定的端口,要使用命令 iptables -t nat -nvL | grep container-ip 來查看。