Docker之xfs文件系统下安装报错解决方案

2024-05-27 09:04

本文主要是介绍Docker之xfs文件系统下安装报错解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求说明

  centos系统下安装docker最新版的时候,安装成功,启动的时候报错。报错信息“failed to start daemon: error initializing graphdriver: overlay2: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.”。经过一系列排查发现,原来是centos早起版本安装系统的时候如果选择的xfs文件系统格式,默认是ftype=0,如果安装新版docker要求ftype=1。为了解决docker启动问题,我们需要一块ext4或者xfs的ftype=1的磁盘,此博文以此为例进行介绍如何解决docker启动遇到d_type参数错误问题。博文实验环境如下:

  • 操作系统:centos7.2
  • docker版本:26.0.0
    在这里插入图片描述

二、解决方案

1、查看磁盘xfs信息

  为了确定原因,我们首先检查xfs磁盘的ftype值,docker默认根位置是在/var/lib/docker,我们检查的根分区,可以看到ftype当前是0,不满足要求。

[root@s172 ~]# xfs_info /
在这里插入图片描述

2、确认系统是否支持overlay

  我们需要先确定系统是否添加overlay模块到内核,如下命令如果没有任何输出说明不支持,我们需要执行步骤3。

[root@s172 ~]# lsmod |grep over
overlay 42451 0

3、添加系统内核支持overlay

  如果步骤2没有执行后没有任何输出则需要使用modprobe添加overlay模块到内核中,然后重启系统。

[root@s172 ~]# modprobe overlay

4、添加一块新磁盘

  博主是在虚拟机环境下进行的仿真实验,添加一块磁盘比较方便。因为修改ftype值需要格式化磁盘,如果是物理机环境磁盘空间全部分配了,可以考虑添加一块新硬盘或者从现有的磁盘中进行缩减。很遗憾的是xfs系统只支持扩容,不支持在线缩减。如果需要从xfs系统中缩减出磁盘空间可以参考博文Linux之XFS文件系统LVM环境移除home分区故障磁盘。此博文介绍了使用xfsdump的方式缩减xfs磁盘大小。

[root@s172 ~]# fdisk -l

在这里插入图片描述

5、磁盘分区

  使用新磁盘创建磁盘分区。

[root@s172 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) print free
Error: /dev/sdb: unrecognised disk label
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel msdos
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? xfs
Start? 1
End? 20G
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 20.0GB 20.0GB primary

(parted) quit

6、磁盘格式化时指定ftype=1

  将磁盘分区格式化,格式化的时候指定ftype=1。

[root@s172 ~]# mkfs.xfs -n ftype=1 /dev/sdb1
在这里插入图片描述

7、创建挂载目录

  创建一个挂载目录。

[root@s172 ~]# mkdir -p /docker

8、挂载/docker目录

  将新磁盘挂载到新目录。

[root@s172 ~]# mount /dev/sdb1 /docker

9、查看磁盘xfs参数信息

  挂载后查看/docker分区的xfs参数信息,确定ftpye参数值为1。

[root@s172 ~]# xfs_info /docker/
在这里插入图片描述

10、修改docker的daemon.json配置文件

  docker默认根目录是/var/lib/docker,如果是根分区参数不满足要求基本上不可能进行参数修改。所以我们需要重新制定docker的根目录,创建/etc/docker/daemon.json文件并写入如下内容。

[root@s172 ~]# cat /etc/docker/daemon.json 
{"storage-driver": "overlay2","data-root": "/docker"
}

11、重新启动docker

  完成如上步骤之后再次启动docker发现不再报错,检查docker运行状态为active。至此问题解决。

[root@s172 ~]# systemctl start docker
[root@s172 ~]# systemctl status docker
在这里插入图片描述

12、查看docker信息

[root@s172 ~]# docker info
Client: Docker Engine - Community
Version: 26.0.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.13.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.25.0
Path: /usr/libexec/docker/cli-plugins/docker-compose

Name: s172
ID: 210461dd-21f6-4cfa-bd3b-01c40d778237
Docker Root Dir: /docker

三、写在最后

  实际上centos7环境下也可以直接yum安装docker,只是安装的版本比较老旧,只能安装到docker1.13版本。博主是需要通过docker安装milvus单机,安装milvus要求docker版本1.19以上。所以是参照博文Linux之docker安装在线安装docker。博主查找了一些资料,作为笔记记录如下:

  • Docker v17.06 之前版本 CentOS 和 RHEL 生产环境必须使用 devicemapper 驱动的 direct-lvm 模式
  • Docker v17.06 之前版本 CentOS 和 RHEL 生产环境必须使用 devicemapper 驱动的 direct-lvm 模式
  • overlay、devicemapper 存储驱动已在 Docker Engine-Enterprise 18.09中弃用,此后docker版本参数配置文件都是overlay2,如果配置overlay则会报错;
  • overlay、overlay2 底层为 overlayfs 文件系统需要用到 d_type 特性;
  • CentOS7 发行版默认 Kernel 版本为 3.10,可以使用 overlay (Kernel 版本 3.10 支持 overlay),xfs 格式文件系统必须指定 ftype=1 来开启 d_type 特性;
  • 担心xfs系统ftype参数影响的可以考虑ext4。

这篇关于Docker之xfs文件系统下安装报错解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007033

相关文章

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

Apache服务器IP自动跳转域名的问题及解决方案

《Apache服务器IP自动跳转域名的问题及解决方案》本教程将详细介绍如何通过Apache虚拟主机配置实现这一功能,并解决常见问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录​​问题背景​​解决方案​​方法 1:修改 httpd-vhosts.conf(推荐)​​步骤

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

Java编译错误java.lang.NoSuchFieldError的解决方案详析

《Java编译错误java.lang.NoSuchFieldError的解决方案详析》java.lang.NoSuchFieldError是Java中的一种运行时错误,:本文主要介绍Java编译错... 目录前言解决方案1. 统一JDK版本环境2. 优化maven-compiler-plugin配置3. 清

Docker + Redis 部署集群的实现步骤

《Docker+Redis部署集群的实现步骤》本文详细介绍了在三台服务器上部署高可用Redis集群的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、环境准备1. 服务器规划(3 台服务器)2. 防火墙配置(三台服务器均执行)3. 安装 docke