docker动态绑定端口

Posted ColdCode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker动态绑定端口相关的知识,希望对你有一定的参考价值。

一、背景

在创建容器的时候,我们可以使用命令 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 来查看。

以上是关于docker动态绑定端口的主要内容,如果未能解决你的问题,请参考以下文章

Docker - 绑定 0.0.0.0:4000 失败:端口已分配

Docker:更改已创建容器上的端口绑定而不会丢失数据

从现有的 docker 容器中删除端口绑定

将 Docker 部署到 AWS Elastic Beanstalk——如何将端口转发到主机? (端口绑定)

docker 容器网络绑定端口部署

Amazon AWS ECS Docker 端口未正确绑定