:docker容器内无法删除文件
转载于:https://blog.csdn.net/weixin_42670653/article/details/100042953
问题:
在docker容器内无法删除文件
dockerfile里
或者在容器内执行完rm -rf之后,文件全部变成??? ???
原因:
centos默认使用的是xfs文件系统,与docker默认的overlay2存储驱动不匹配,因此无法删除
具体可以参考一下网址:https://www.jianshu.com/p/00ffd8df6010
1. 必须在格式化为xfs的时候,指定ftype=1,不然docker可能会出现未知错误
查看当前操作系统是否支持overlay
lsmod|grep over
如果没有输出,表示不支持,如果是以下结果,表示支持
可以通过以下命令开启overlay
modprobe overlay
docker官方建议使用overlay2
2. xfs文件系统的d_type
d_type是Linux内核的一个术语,表示“目录条目类型”,目录条目是文件系统上目录信息的一个数据结构,d_type就是这个数据结果的一个字段
3. docker在overlay2(xfs文件系统)需要d_type
不论是overlay还是overlay2,底层文件系统都是overlayfs,overlayfs文件系统,需要d_type看文件的操作是否被正确的处理
docker info
用来检查docker服务,是否在使用overlay的时候正确使用d_type
如果在不支持d_type的overlay驱动下使用docker,在docker操作文件的时候,可能会遇到一些问题,比如无法删除某些目录或者文件
检测在当前的文件系统,是否支持d_type
xfs_info /
0表示不支持
解决方法:
1. 只能通过重做文件系统来解决,不能在已经存在的操作系统上进行修改
备份数据
重新创建文件系统
恢复备份数据
mkfs.xfs -n ftype=1 /path/to/your/device
2. 第一个方法太复杂
docker换个文件驱动,该systemd unit file, 加参数指定老的devicemapper,不过后果是会把image清空
/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --storage-driver=devicemapper
systemctl daemon-reload
systemctl restart docker
或者更简单的方法
修改/etc/docker/daemon.json文件
{
"live-restore": true,
"registry-mirrors": ["http://dockerhub.azk8s.cn"],
"data-root": "/disk/docker1/nn1",
"storage-driver": "devicemapper"
}
然后重启docker即可