【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 address
docker容器 查看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】给运行的容器添加端口映射》对你有帮助,请点赞、收藏,并留下你的观点哦!