即使卸下所有容器后,“设备上仍然没有空间”

在试验Docker和Docker Compose时,我突然遇到“设备上没有空间”的错误。 我试图删除一切使用类似的问题中提出的方法,但无济于事。

我跑的东西:

$ docker-compose rm -v $ docker volume rm $(docker volume ls -qf dangling=true) $ docker rmi $(docker images | grep "^<none>" | awk "{print $3}") $ docker system prune $ docker container prune $ docker rm $(docker stop -t=1 $(docker ps -q)) $ docker rmi -f $(docker images -q) 

据我所知,现在真的不应该有任何东西了。 看起来这样:

 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE 

相同的卷:

 $ docker volume ls DRIVER VOLUME NAME 

而对于容器:

 $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 

不幸的是,我仍然得到这样的错误:

 $ docker-compose up Pulling adminer (adminer:latest)... latest: Pulling from library/adminer 90f4dba627d6: Pulling fs layer 19ae35d04742: Pulling fs layer 6d34c9ec1436: Download complete 729ea35b870d: Waiting bb4802913059: Waiting 51f40f34172f: Waiting 8c152ed10b66: Waiting 8578cddcaa07: Waiting e68a921e4706: Waiting c88c5cb37765: Waiting 7e3078f18512: Waiting 42c465c756f0: Waiting 0236c7f70fcb: Waiting 6c063322fbb8: Waiting ERROR: open /var/lib/docker/tmp/GetImageBlob865563210: no space left on device 

有关我的Docker安装的一些数据:

 $ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 1 Server Version: 17.06.1-ce Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 15 Dirperm1 Supported: true 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: 6e23458c129b551d5c9871e5174f6b1b7f6d1170 runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2 init version: 949e6fa Security Options: apparmor seccomp Profile: default Kernel Version: 4.10.0-32-generic Operating System: Ubuntu 16.04.3 LTS OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.685GiB Name: engelbert ID: UO4E:FFNC:2V25:PNAA:S23T:7WBT:XLY7:O3KU:VBNV:WBSB:G4RS:SNBH Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: No swap limit support 

和我的磁盘信息:

 $ df -h Filesystem Size Used Avail Use% Mounted on udev 3,9G 0 3,9G 0% /dev tmpfs 787M 10M 778M 2% /run /dev/nvme0n1p3 33G 25G 6,3G 80% / tmpfs 3,9G 46M 3,8G 2% /dev/shm tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup /dev/loop0 81M 81M 0 100% /snap/core/2462 /dev/loop1 80M 80M 0 100% /snap/core/2312 /dev/nvme0n1p1 596M 51M 546M 9% /boot/efi /dev/nvme0n1p5 184G 52G 123G 30% /home tmpfs 787M 12K 787M 1% /run/user/121 tmpfs 787M 24K 787M 1% /run/user/1000 

和:

 $ df -hi /var/lib/docker Filesystem Inodes IUsed IFree IUse% Mounted on /dev/nvme0n1p3 2,1M 2,0M 68K 97% / 

如上所述,我仍在试验,所以我不确定是否发布了所有相关信息 – 如果您需要更多信息,请告知我们。

任何人有任何想法更多可能是这个问题?

问题在于/var/lib/docker位于inodes文件系统中。 你可以通过运行df -i /var/lib/docker

因为/home的文件系统有足够的inode和磁盘空间,所以在那里移动Docker的工作目录应该重新开始。

(请注意,这个假设在当前的Docker安装中没有任何价值。)

首先停止Docker守护进程。 在Ubuntu上运行

 sudo service docker stop 

然后移走旧的/var/lib/docker

 sudo mv /var/lib/docker /var/lib/docker~ 

现在在/home上创build一个目录:

 sudo mkdir /home/docker 

并设置所需的权限:

 sudo chmod 0711 /home/docker 

/var/lib/docker目录链接到新的工作目录:

 sudo ln -s /home/docker /var/lib/docker 

然后重新启动Docker守护进程:

 sudo service docker start 

然后它应该再次工作。