由于挂载nfs共享磁盘导致docker启动失败
前言
为了部署应用方便,在部署的时候关闭了iptables防火墙,应用程序正常运行后,为了安全开启了iptables防火墙,由此导致的docker启动失败,因为docker启动的时候需要挂载nfs共享存储,而防火墙拦阻了共享存储的网络导致nfs挂载失败,docker启动无法使用nfs的共享目录。
一、相关的主机信息
主机 | 应用 |
---|---|
app1–97.9 | docker+nfs挂载端 |
db1–97.55 | mysql+nfs服务端 |
二、相关报错信息及操作步骤
1.排查问题
docker run -d --restart=always --name minio
-p 9000:9000 -p 9001:9001
-e MINIO_ROOT_USER=test
-e MINIO_ROOT_PASSWORD=123456
-v /data/minio/data:/data
-v /data/minio/config:/root/.minio
minio/minio
server /data --console-address “:9001” --address “:9000”
挂载的时候报错无法挂载/data目录,因为这个目录是nfs共享目录;
还有个问题,是查看磁盘空间的时候卡死,不动,
执行的命令是: df -h
df -h和分区挂载有关,先卸载挂载挂载的目录:
umount -l /data/
2.解决方法
输入命令查看nfs服务端是否可以挂载
showmount -e 192.168.97.55
无法挂载,原因是被防火墙拦截了;
服务端查看nfs对应的端口:
[root@db1 ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 58046 status
100024 1 tcp 40718 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 51970 nlockmgr
100021 3 udp 51970 nlockmgr
100021 4 udp 51970 nlockmgr
100021 1 tcp 37297 nlockmgr
100021 3 tcp 37297 nlockmgr
100021 4 tcp 37297 nlockmgr
查出来的端口都要做放行,
配置防火墙:
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 58046 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 40718 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 51970 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 37297 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 20048 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 20048 -j ACCEPT
保存配置:
service iptables save
查看防火墙策略带编号:
iptables -nL --line-number
删除配置
iptables -D INPUT “序号”
再次去挂载:
[root@ywbd-app1 ~]# showmount -e 192.168.97.55
Export list for 192.168.97.55:
/data *
输出以上信息表示可以正常挂载了;
挂载nfs:
mount -t nfs 192.168.97.55:/data/ /data/
再次执行启动docker就可以正常启动了。