【Docker】给运行的容器添加端口映射
最近使用Docker作为容器,部署项目的时候,发现有个问题就是容器只能在启动的时候配置预先配置端口,但是往往实际应用的过程中会发现端口不够用,然后网上找了一下资料,大概的方案有两种:
-
方法一:把正在运行的容器打包成为docker镜像,然后直接使用run命令重新添加端口映射。这个方法虽然简单,但是很麻烦而且某些情况下还是会有些问题的,例如:你的容器已经占用了100GB的容量,这时候为了增加端口,而把容器再打包成镜像这是不实际的。【docker常用命令-传送门】
-
方法二:获取需要添加端口的,正在运行的docker容器的内网ip地址(一般是172开头的),然后在宿主机的防火墙上面添加端口映射,直接映射容器的ip地址即可。
-
上述两个方案的参考资料【怎么给运行中的docker容器添加新的端口】
由于上述资料给出的方案2使用的是iptable,但是centos7已经没有使用iptable了,所以就需要改用firewall了。
Centos7 添加端口映射
上网找了一下资料,然后自己配置了一下就成功了,先列出参考链接:
安装Telnet服务
- 首先需要确认宿主机能不能连接docker容器的网络以及对应的端口,所以我们需要安装telnet来测试端口是否能够连通。输入以下命令检查是否安装了telnet服务
rpm -qa telnet-server
rpm -qa xinetd
如果没有安装,则先安装。安装命令如下:
# 安装 telnet
yum list |grep telnet
yum install telnet-server.x86_64
yum install telnet.x86_64
# 安装xinetd
yum list |grep xinetd
yum install xinetd.x86_64
# 将xinetd服务加入开机自启动:
systemctl enable xinetd.service
# 将telnet服务加入开机自启动:
systemctl enable telnet.socket
# 最后,启动以上两个服务即可:
# 由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd 。
systemctl start telnet.socket
systemctl 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/tcp firewall-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访问, 需要查看配置文件才能看得到
其他资料
更多推荐