我有这个 Docker 命令:
docker run -d mongo
这将构建并运行在 docker 容器中运行的 mongodb 服务器
但是,我收到错误:
no space left on device
我使用的是 MacOS,并使用较新版本的 Docker,它使用 hyper-v 而不是 VirtualBox(我认为这是正确的)。
这是来自
mongo
容器的确切错误消息:
$ docker logs efee16702c5756659d563b98d4ae0f58ecf1f1bba8a54f63443c0ae4b520ab4e
about to fork child process, waiting until server is ready for connections.
forked process: 21
2017-05-04T20:23:51.412+0000 I CONTROL [main] ***** SERVER RESTARTED *****
2017-05-04T20:23:51.430+0000 I CONTROL [main] ERROR: Cannot write pid file to /tmp/tmp.Lo035QkbfL: No space left on device
ERROR: child process failed, exited with error number 1
知道如何解决这个问题并防止将来再次发生吗?
按照建议,
df -h
的输出是:
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1 465Gi 116Gi 349Gi 25% 1963838 4293003441 0% /
devfs 183Ki 183Ki 0Bi 100% 634 0 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
docker info
的输出是:
$ docker info
Containers: 5
Running: 0
Paused: 0
Stopped: 5
Images: 741
Server Version: 17.03.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
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
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: N/A (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
seccomp
Profile: default
Kernel Version: 4.9.13-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.952 GiB
Name: moby
ID: OR4L:WYWW:FFAP:IDX3:B6UK:O2AN:UVTO:EPH6:GYSV:4GV4:L5WP:BQTH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 17
Goroutines: 30
System Time: 2017-05-04T20:45:27.056157913Z
EventsListeners: 1
No Proxy: *.local, 169.254/16
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
正如您在问题的评论中所述,
ls -altrh ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
返回以下内容:
-rw-r--r--@ 1 alexamil staff 53G
这是 MacOS 上的一个已知错误(实际上,不仅如此),可以在此处找到官方开发评论。除了一件事:我读到,不同的人有不同的尺寸限制。在评论中是 64Gb,但对于另一个人来说是 20Gb。
有一些解决方法,但我找不到明确的解决方案。
运行
docker ps -a
并手动删除所有未使用的容器。然后运行 docker images
并手动删除所有中间和未使用的图像。
完全删除
Docker.qcow2
文件。但您将丢失所有图像和容器。完全。
另一种方法是运行
docker volume prune
,这将 删除所有未使用的卷
我想到的另一个想法是使用 QEMU 或类似的东西来扩展磁盘映像大小:
$ brew install qemu
$ /Applications/Docker.app/Contents/MacOS/qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +5G
扩展映像后,您将需要运行一个虚拟机,在其中针对 Docker.qcow2 运行 GParted 并扩展分区以使用增加的空间。您可以使用 GParted Live ISO 来实现:
$ qemu-system-x86_64 -drive file=Docker.qcow2 -m 512 -cdrom ~/Downloads/gparted-live.iso -boot d -device usb-mouse -usb
有些人报告这不起作用或没有帮助。
创建所需大小(120G)的替代图像:
$ qemu-img create -f qcow2 ~/data.qcow2 120G
$ cp ~/data.qcow2 /Application/Docker.app/Contents/Resources/moby/data.qcow2
$ rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
当您重新启动 docker 时,data.qcow2
会复制到 ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
。
此解决方法来自 来自此评论。
希望这有帮助。祝你好运!
如果您有 Docker 桌面,您只需转到“设置”(右上角的齿轮图标)并增加“资源”下的磁盘映像大小。