在构建容器时(当我在容器内运行相同的命令时也会发生同样的情况),我遇到了一个错误,抱怨“设备上没有剩余空间”。我检查df
并确认我有足够的空间。我的操作系统是 Arch Linux,以下是输出docker info
:
[mark@arch stackage-head]$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 123
Server Version: 18.03.0-ce
Storage Driver: devicemapper
Pool Name: docker-8:3-5898903-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: xfs
Udev Sync Supported: true
Data file: /dev/loop0
Metadata file: /dev/loop1
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 45.27GB
Data Space Total: 107.4GB
Data Space Available: 56.87GB
Metadata Space Used: 36.01MB
Metadata Space Total: 2.147GB
Metadata Space Available: 2.111GB
Thin Pool Minimum Free Space: 10.74GB
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.146 (2017-12-18)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfd04396dc68220d1cecbe686a6cc3aa5ce3667c
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 4.15.11-1-ARCH
Operating System: Arch Linux
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.58GiB
Name: arch
ID: VKYM:3FM2:MAE7:SZPY:E4CR:6U6K:Z5SG:5A66:NEJT:K4MD:LN57:FBXM
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: mrkkrp
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
我尝试使用该--storage-opt size=20G
选项,但它失败了,如下所示:
[mark@arch stackage-head]$ docker run -it --storage-opt size=20G snoyberg/stackage:nightly bash
docker: Error response from daemon: Failed to grow rootfs:exit status 1:xfs_growfs: /dev/mapper/docker-8:3-5898903-3456c9ee1d5a83fc705125974101c89015562d0cc4c00bc5e1c97bd560dded6a-init is not a mounted XFS filesystem.
See 'docker run --help'.
按照文档这应该有效。
我查看了 Arch Linux wiki,其中有相关部分:
然而,我不确定这对我来说如何,因为我没有安装 XFS 文件系统/etc/fstab
,据我所知,devicemapper
它是根据容器的需要创建它们的。
容器不能增长到大于这个“基本设备大小”,因此我尝试以各种方式增加它。
与
docker daemon --storage-opt dm.basesize=20G
按照这个老帖子。唉,--storage-opt
据报道为未知标志。通过传递
--storage-opt dm.basesize=20G
到docker run
,但这次dm.basesize
被报告为未知选项。
答案1
但是,我不确定这对我有何影响,因为我没有在 /etc/fstab 中安装 XFS 文件系统,据我了解 devicemapper 根据容器的需要创建它们。
你当然是对的,但我们可以在你的“Docker Info”中看到“Backing Filesystem:xfs”。这意味着 docker 使用 xfs 作为在卷“docker-8:3-5898903-pool”中动态创建的容器基本卷
选项“--storage-opt size=20G”对我有用。
我认为您的 docker 保留存储卷没有足够的空间来增长。
请发布以下命令的结果:
- LSBLK
- 项目清单
- LVS
- VG
答案2
在除禁用之外的其他模式下使用 selinux 循环时要小心。
如果您不了解 SELinux,请使用禁用模式进行测试(使用这个)并了解 docker 中的 SELinux 以正确配置它(Docker SELinux 安全策略)。