失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Docker】给运行的容器添加端口映射

【Docker】给运行的容器添加端口映射

时间:2023-09-17 11:51:04

相关推荐

【Docker】给运行的容器添加端口映射

【Docker】给运行的容器添加端口映射

最近使用Docker作为容器,部署项目的时候,发现有个问题就是容器只能在启动的时候配置预先配置端口,但是往往实际应用的过程中会发现端口不够用,然后网上找了一下资料,大概的方案有两种:

方法一:把正在运行的容器打包成为docker镜像,然后直接使用run命令重新添加端口映射。这个方法虽然简单,但是很麻烦而且某些情况下还是会有些问题的,例如:你的容器已经占用了100GB的容量,这时候为了增加端口,而把容器再打包成镜像这是不实际的。【docker常用命令-传送门】

方法二:获取需要添加端口的,正在运行的docker容器的内网ip地址(一般是172开头的),然后在宿主机的防火墙上面添加端口映射,直接映射容器的ip地址即可。

上述两个方案的参考资料【怎么给运行中的docker容器添加新的端口】

由于上述资料给出的方案2使用的是iptable,但是centos7已经没有使用iptable了,所以就需要改用firewall了。

Centos7 添加端口映射

上网找了一下资料,然后自己配置了一下就成功了,先列出参考链接:

centos7安装telnet服务linux/centos7 端口映射CentOS7使用firewalld打开关闭防火墙与端口

安装Telnet服务

首先需要确认宿主机能不能连接docker容器的网络以及对应的端口,所以我们需要安装telnet来测试端口是否能够连通。输入以下命令检查是否安装了telnet服务

rpm -qa telnet-serverrpm -qa xinetd

如果没有安装,则先安装。安装命令如下:

# 安装 telnetyum list |grep telnetyum install telnet-server.x86_64yum install telnet.x86_64# 安装xinetd yum list |grep xinetdyum install xinetd.x86_64# 将xinetd服务加入开机自启动:systemctl enable xinetd.service# 将telnet服务加入开机自启动:systemctl enable telnet.socket# 最后,启动以上两个服务即可:# 由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd 。systemctl start telnet.socketsystemctl start xinetd(或service xinetd start)# 使用telnet命令测试端口是否连通telnet 172.17.0.1 8080

另外补充一下查看ip地址的命令

centos7查看ip地址命令

ip addressdocker容器 查看ip地址命令

ifconfig

使用firewalld实现端口映射功能:

启动firewalld功能

systemctl start firewalld

永久打开端口(示例端口3000/tcp)【注意,这里打开的是宿主机的端口,而不是容器的端口】

firewall-cmd --add-port=3000/tcp --permanent# 批量打开端口命令firewall-cmd --permanent --zone=public --add-port=100-500/tcpfirewall-cmd --permanent --zone=public --add-port=100-500/udp

重新加载生效:

firewall-cmd --reload

查看打开的端口

firewall-cmd --list-ports

永久添加映射规则【端口3000 映射到 172.17.0.1:8080端口,172.17.0.1为docker容器的ip地址】

firewall-cmd --add-forward-port=port=3000:proto=tcp:toaddr=172.17.0.1:toport=8080 --permanent

永久允许防火墙伪装ip:

firewall-cmd --add-masquerade --permanent

关闭端口

firewall-cmd --zone=public --remove-port=80/tcp --permanent

允许某个ip访问端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="5432" accept"

查看firewalld配置文件

cat /etc/firewalld/zones/public.xml # 因为有些端口只允许某些ip访问, 需要查看配置文件才能看得到

其他资料

【传送门】centos7 firewall常用命令

如果觉得《【Docker】给运行的容器添加端口映射》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。