Docker overlay2 资源忙
Docker overlay2 resource is busy
我在 docker 方面需要一些帮助! :D
当我必须部署我的应用程序时,有时会出现此错误
Cannot create container for service db: error creating overlay mount to /var/lib/docker/overlay2/<HASH>-init/merged: no such file or directory
或
container <HASH>: driver "overlay2" failed to remove root filesystem: unlinkat /var/lib/docker/overlay2/<HASH>/merged: device or resource busy
这是我的 docker info
输出:
Client:
Debug Mode: false
Server:
Containers: 17
Running: 17
Paused: 0
Stopped: 0
Images: 223
Server Version: 19.03.5
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Kernel Version: 3.10.0-1062.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.09GiB
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Live Restore Enabled: false
每次出现 resource is busy
错误时,我都会将 /var/lib/docker/(containers OR overlay2)
中的 HASH 目录移动到 HASH_old 目录,然后重新尝试部署应用程序,过去可以正常工作,但现在 no such file or directory
错误总是出现,即使将所有文件夹移动到 _old
。
关闭有问题的容器和 运行 docker system prune -af
,这将删除未使用的容器和图像。之后尝试构建和部署,应该可以工作
由于 JVictorV 的回答对我不起作用,我 post 在这里给出了我对这个一般错误的解决方案,有很多问题都与它有关,但解决方案不多或者它们不起作用
就我而言,令人惊讶的解决方法是限制 'RUN' docker 建筑 commands/layers 的数量,因为如果数量超过 60 layers/commands,它总是最终以缺少 'merged' 文件夹错误告终,无论命令的内容是什么,即使 RUN ls -la
之类的简单命令也会以该错误告终,如果 such/any 命令的总数高于大约60,奇怪。 Merged
子文件夹总是丢失,即使当我自动生成所有合并的子文件夹时,总是会动态创建一个带有新散列的新层,该层丢失了该子文件夹。
清理overlay2文件夹时出现这个错误,最后可以这样解决问题:
umount /var/lib/docker/overlay2-legacy/*/merged
rm -R /var/lib/docker/overlay2-legacy/*
注意:这可能会导致数据丢失。
我在 docker 方面需要一些帮助! :D
当我必须部署我的应用程序时,有时会出现此错误
Cannot create container for service db: error creating overlay mount to /var/lib/docker/overlay2/<HASH>-init/merged: no such file or directory
或
container <HASH>: driver "overlay2" failed to remove root filesystem: unlinkat /var/lib/docker/overlay2/<HASH>/merged: device or resource busy
这是我的 docker info
输出:
Client:
Debug Mode: false
Server:
Containers: 17
Running: 17
Paused: 0
Stopped: 0
Images: 223
Server Version: 19.03.5
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Kernel Version: 3.10.0-1062.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.09GiB
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Live Restore Enabled: false
每次出现 resource is busy
错误时,我都会将 /var/lib/docker/(containers OR overlay2)
中的 HASH 目录移动到 HASH_old 目录,然后重新尝试部署应用程序,过去可以正常工作,但现在 no such file or directory
错误总是出现,即使将所有文件夹移动到 _old
。
关闭有问题的容器和 运行 docker system prune -af
,这将删除未使用的容器和图像。之后尝试构建和部署,应该可以工作
由于 JVictorV 的回答对我不起作用,我 post 在这里给出了我对这个一般错误的解决方案,有很多问题都与它有关,但解决方案不多或者它们不起作用
就我而言,令人惊讶的解决方法是限制 'RUN' docker 建筑 commands/layers 的数量,因为如果数量超过 60 layers/commands,它总是最终以缺少 'merged' 文件夹错误告终,无论命令的内容是什么,即使 RUN ls -la
之类的简单命令也会以该错误告终,如果 such/any 命令的总数高于大约60,奇怪。 Merged
子文件夹总是丢失,即使当我自动生成所有合并的子文件夹时,总是会动态创建一个带有新散列的新层,该层丢失了该子文件夹。
清理overlay2文件夹时出现这个错误,最后可以这样解决问题:
umount /var/lib/docker/overlay2-legacy/*/merged
rm -R /var/lib/docker/overlay2-legacy/*
注意:这可能会导致数据丢失。