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

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境