zl程序教程

您现在的位置是:首页 >  工具

当前栏目

docker build失败error creating overlay mount to /var/lib/docker/overlay2/XX/merged: invalid argument

Dockerinvalid Error to 失败 build lib var
2023-09-11 14:16:33 时间

背景:

服务混跑的情况,任何中间件或配置的变更,都要检查是否影响了现有服务。

服务器上原来跑的docker服务。同事在上面装mysql,导数据,各种安装插件,不知道怎么docker被卸载了。。。重装之后build镜像的时候提示:error creating overlay mount to /var/lib/docker/overlay2/XX/merged: invalid argument。

处理:

参考https://www.jianshu.com/p/66f5f1e2bfa8,原文用到的组合拳1. 变更storage driver类型 + 2. 禁用selinux

对于我来说,只执行了第一步变更storage driver类型,从overlay2变更为overlay就可以了。

停止docker服务
systemctl stop docker


清理镜像
rm -rf /var/lib/docker


修改存储类型
vi /etc/sysconfig/docker-storage


把DOCKER_STORAGE_OPTIONS参数改为overlay:
DOCKER_STORAGE_OPTIONS="--storage-driver overlay"

原理学习:

通过 docker info 查询,对比发现,除了Storage Driver从overlay2变成了overlay,相比overlay2,还少了一行:配置Native Overlay Diff: false。

Containers: 2

Running: 2

Paused: 0

Stopped: 0

Images: 15

Server Version: 1.13.1

Storage Driver: overlay

Backing Filesystem: extfs

Supports d_type: true

Logging Driver: journald

Cgroup Driver: systemd

Plugins:

Volume: local

Network: bridge host macvlan null overlay

Swarm: inactive

Runtimes: docker-runc runc

Default Runtime: docker-runc

Init Binary: /usr/libexec/docker/docker-init-current

containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)

runc version: 9c3c5f853ebf0ffac0d087e94daef462133b69c7 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)

init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)

Security Options:

seccomp

  WARNING: You're not using the default seccomp profile

  Profile: /etc/docker/seccomp.json

Kernel Version: 3.10.0-229.el7.x86_64

Operating System: CentOS Linux 7 (Core)

OSType: linux

Architecture: x86_64

Number of Docker Hooks: 3

CPUs: 24

Total Memory: 125.7 GiB

Name: 13-1-138-bx-core.jpool.sinaimg.cn

ID: PRO7:4EXJ:MEI6:RZBK:KU7A:ZU2N:KG2L:K2VF:4FHW:CC4A:ZEVV:N2VS

Docker Root Dir: /var/lib/docker

Debug Mode (client): false

Debug Mode (server): false

Registry: https://index.docker.io/v1/

WARNING: bridge-nf-call-iptables is disabled

WARNING: bridge-nf-call-ip6tables is disabled

Experimental: false

Insecure Registries:

127.0.0.0/8

Live Restore Enabled: false

Registries: docker.io (secure)

参考下面的文章,看一下overlay和overlay2的差别。

https://blog.csdn.net/zhonglinzhang/article/details/80970411

1. docker数据分层OverlayFS的基本原理:

将单个Linux主机上的两个目录合并成一个目录。这些目录被称为层,统一过程被称为联合挂载。OverlayFS底层目录称为lowerdir, 高层目录称为upperdir。合并统一视图称为merged。当需要修改一个文件时,使用CoW将文件从只读的Lower复制到可写的Upper进行修改,结果也保存在Upper层。在Docker中,底下的只读层就是image,可写层就是Container

       下图分层图,镜像层是lowdir,容器层是upperdir,统一的视图层是merged层

overlay就是按照这种形式组织的,用的是硬连接。

mount|grep overlay 看挂载情况:

overlay on /var/lib/docker/overlay/18ad814598c9f6068cf757ed1d3eee396717034fb17c390fce388de0ba4caa1f/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay/1c5aee752be12cb2254a0c73c46cdafb45f8ed73bb87ee9feb2096095112b5bc/root,upperdir=/var/lib/docker/overlay/18ad814598c9f6068cf757ed1d3eee396717034fb17c390fce388de0ba4caa1f/upper,workdir=/var/lib/docker/overlay/18ad814598c9f6068cf757ed1d3eee396717034fb17c390fce388de0ba4caa1f/work)

overlay2用的软链接,diff记录每一层自己内容的数据,link记录该层链接目录。
 

所以为什么overlay2的时候merged的挂载就失败了么?