docker build失败error creating overlay mount to /var/lib/docker/overlay2/XX/merged: invalid argument
背景:
服务混跑的情况,任何中间件或配置的变更,都要检查是否影响了现有服务。
服务器上原来跑的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的挂载就失败了么?
相关文章
- Docker系列之烹饪披萨(二)
- Docker中mysql修改配置导致无法启动的docker容器
- Jenkins+Docker 一键自动化部署 SpringBoot 项目
- Docker:慕课网--第一个docker化的java应用
- Docker在Centos上默认路径空间存储不足
- 创建尽可能小的 Docker 容器
- docker: Error response from daemon: error while creating mount source path mkdir
- docker for windows--快速搭建各种关系型数据库RMDB的测试环境
- docker for windows--Windows 10 家庭中文版 21H2 安装Docker Desktop初体验
- 《第一本Docker书(修订版)》——导读
- Docker环境搭建与使用:docker容器的基本使用方法
- Docker环境搭建与使用:docker常用的命令
- 如何在查看docker container内进程信息,与宿主机上进程信息的映射关系
- docker 不同版本 添加--insecure-registry
- Docker 错误 docker: invalid reference format. 的解决
- 浅析Docker数据管理-数据库容器化并持久化:数据卷概念、创建数据卷的2种方式、docker volume用法
- docker命令:docker-stack相关操作、使用 inspect 命令查看镜像详细信息、docker rm & docker rmi & docker prune 清理删除镜像的差异
- 配置Docker中国区官方镜像http://get.daocloud.io/ 很好的一个源http://get.daocloud.io/#install-docker
- docker出现GPG error: At least one invalid signature was encountered 相关问题及解决方法
- Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock