use*_*mda 277 memory ubuntu temp docker
我用以下方式在Debian 7机器上安装了docker
$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
Run Code Online (Sandbox Code Playgroud)
之后,当我第一次尝试创建一个Image时,它失败并出现以下错误
time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"
Run Code Online (Sandbox Code Playgroud)
这是码头工人信息
Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
Total Memory: 15.7 GiB
WARNING: No memory limit support
WARNING: No swap limit support
Run Code Online (Sandbox Code Playgroud)
我怎样才能增加内存?系统配置存储在哪里?
从Kal的建议:
当我摆脱所有图像和容器时,它释放了一些空间,并且图像构建运行时间更长,然后失败并出现相同的错误.所以问题是,这涉及哪个空间以及如何配置它?
Mah*_*alt 299
我有同样的错误并以这种方式解决它:
1.删除Docker中的孤立卷,可以使用内置的docker volume命令.内置命令还会删除/ var/lib/docker/volumes中不是卷的任何目录,因此请确保您没有在其中放置任何要保存的内容.
如果您想要保留一些数据,请务必小心
清理:
$ docker volume rm $(docker volume ls -qf dangling=true)
Run Code Online (Sandbox Code Playgroud)
附加命令:
列出悬空卷:
$ docker volume ls -qf dangling=true
Run Code Online (Sandbox Code Playgroud)
列出所有卷:
$ docker volume ls
Run Code Online (Sandbox Code Playgroud)
2.还要考虑删除所有未使用的图像.
首先摆脱<none>
图像(这些图像有时是在构建图像时生成的,如果出于任何原因图像构建被中断,它们就会停留在那里).
这是我用来删除它们的一个很好的脚本
docker rmi $(docker images | grep '^<none>' | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)
然后,如果您使用Docker Compose为每个项目本地构建映像.您最终会得到很多通常被命名为文件夹的图像(例如,如果您的项目文件夹名为Hello,则会找到图像名称Hello_blablabla
).所以也考虑删除所有这些图像
您可以编辑上面的脚本以删除它们或手动删除它们
docker rmi {image-name}
Jos*_*ook 261
更新
随着Docker变得更加发达,以下命令已成为黑客攻击.目前的最佳做法是
docker system prune
Run Code Online (Sandbox Code Playgroud)
这将删除:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images
Run Code Online (Sandbox Code Playgroud)
如下所示,这是核.
要清理系统,请先卸下容器
$ docker rm $(docker ps -aq)
Run Code Online (Sandbox Code Playgroud)
然后删除图像
$ docker rmi $(docker images -q)
Run Code Online (Sandbox Code Playgroud)
这当然是核,将删除所有容器和所有图像.您可以通过docker rm #CONTAINER_ID#
和删除它们docker rmi #IMAGE_ID
.
Kal*_*Kal 68
检查/ var上是否有可用空间,因为这是Docker默认存储图像文件的位置(在/ var/lib/docker中).
首先清理docker ps -a
所有容器(包括已停止的容器)并将docker rm
其删除; 然后docker images
用来列出你存储的所有图像并将docker rmi
其删除.
接下来,使用docker守护程序上的-g选项或通过编辑/etc/default/docker
并添加-g
选项来更改存储位置DOCKER_OPTS
.-g
指定"Docker运行时"的位置,它基本上是Docker在构建映像和运行容器时创建的所有东西.选择具有足够空间的位置,因为使用的磁盘空间将随着时间的推移而增长.如果编辑/etc/default/docker
,则需要重新启动docker守护程序才能使更改生效.
现在您应该能够创建一个新映像(或从Docker Hub中提取一个),您应该看到在使用-g选项指定的目录中创建了一堆文件.
dav*_*wil 41
因此,docker system prune
并docker system prune --volumes
在其他答案中建议每次都释放一些空间,但最终每次我运行任何东西时都会出现错误。
真正解决根本问题的是删除Docker.raw
Docker for Mac 用于存储的文件,然后重新启动它。
要找到该文件,请打开 Docker for Mac 并转到*
Preferences > Resources > Advanced > Disk Image Location
Run Code Online (Sandbox Code Playgroud)
*这适用于 2.2.0.5 版,但在旧版本上应该类似
在较新版本的 Docker for Mac** 上,它会在 UI 中显示磁盘上该文件的实际大小,以及其最大分配大小。你可能会看到它是巨大的。例如在我的机器上它是41GB!
**在旧版本中,它不会在 UI 中显示实际磁盘使用情况,MacOS Finder始终将文件大小显示为最大分配大小。您可以通过在终端中打开目录并运行来检查磁盘上的实际大小
du -h Docker.raw
我删除了Docker.raw
,重新启动了 Docker for Mac,该文件再次自动创建并恢复为0GB。
一切都像以前一样继续工作,当然我丢失了我的 Docker 缓存。正如预期的那样,在运行了一些 Docker 命令后,文件开始再次填满几 GB 的内容,但还不到41 GB 。
更新
几个月后,我的Docker.raw
填充物再次恢复到类似的大小。所以这种方法确实有效,但必须每隔几个月重复一次。对我来说很好。
关于为什么这样做的说明 - 我必须假设这是 Docker for Mac 中的一个错误。看起来docker system prune
/docker system prune --volumes
应该完全清除该文件的内容,但该文件似乎积累了这些命令无法删除的其他内容。无论如何,手动删除它可以解决问题!
小智 29
如果它只是Docker的测试安装(即非生产)并且您不关心进行核清理,您可以:
清理所有容器:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm
清理所有图像:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
再次,我在开发Docker时在ec2实例中使用它,而不是在任何严重的QA或生产路径中.最棒的是,如果你有你的Dockerfile,它很容易重建和或docker pull
.
RoB*_*ToZ 25
如前所述,
docker system prune
Run Code Online (Sandbox Code Playgroud)
可以提供帮助,但使用Docker 17.06.1及更高版本时不会修剪未使用的卷。从Docker 17.06.1开始,以下命令也修剪卷:
docker system prune --volumes
Run Code Online (Sandbox Code Playgroud)
从Docker文档中:https : //docs.docker.com/config/pruning/
docker system prune命令是用于修剪映像,容器和网络的快捷方式。在Docker 17.06.0及更早版本中,还修剪了卷。在Docker 17.06.1及更高版本中,必须为docker system prune指定--volumes标志以修剪卷。
如果要修剪卷并保留图像和容器:
docker volume prune
Run Code Online (Sandbox Code Playgroud)
ken*_*orb 19
如果您使用的是 Docker 桌面,则可以通过转至 Docker 的首选项在高级设置中增加磁盘映像大小。
这是来自 macOS 的屏幕截图:
May*_*ary 16
我在 RHEL 机器上也遇到过这个问题。我在 stack-overflow 和 docker-hub 社区的任何地方都没有找到任何合适的解决方案。如果您在执行以下命令后仍面临此问题:
docker system prune --all
最终奏效的解决方案:
pun*_*lly 15
Docker留下悬空的图像可以占用你的空间.要在Docker之后清理,请运行以下命令:
docker image prune [-af if you want to force remove all images]
Run Code Online (Sandbox Code Playgroud)
或者使用旧版本的Docker:
docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")
Run Code Online (Sandbox Code Playgroud)
这将删除已退出和悬空的图像,这有望清除设备空间.
小智 13
1. 移除容器:
$ docker rm $(docker ps -aq)
2. 删除图像:
$ docker rmi $(docker images -q)
您可以执行以下操作,而不是执行步骤 1 和 2:
docker system prune
此命令将删除:
Gui*_*ume 10
一次删除所有未使用的容器,卷,网络和图像(https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands):
docker system prune -a -f --volumes
Run Code Online (Sandbox Code Playgroud)
如果还不够,可以先删除正在运行的容器:
docker rm -f $(docker ps -a -q)
docker system prune -a -f --volumes
Run Code Online (Sandbox Code Playgroud)
增加/ var/lib/docker或使用具有更多空间的其他位置也是摆脱此错误的一个很好的替代方法(请参阅如何更改docker映像安装目录?)
小智 10
如果您已经清理了未使用的容器,请使用
docker system prune -a
Run Code Online (Sandbox Code Playgroud)
确保检查您是否有不健康的容器。他们真的可以以一种奇怪和不可预测的方式行事。在我的情况下,由于这些,我得到了这个错误,即使有大量的磁盘空间。
docker ps -a
将列出所有容器。如果其中任何一个看起来像这样:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds (unhealthy) 3300-3310/tcp webapp
Run Code Online (Sandbox Code Playgroud)
您将需要重新启动 docker 守护进程。
你也可以用:
docker system prune
Run Code Online (Sandbox Code Playgroud)
或者只是卷:
docker volume prune
Run Code Online (Sandbox Code Playgroud)
就我而言,我没有那么多图像/容器,但是构建缓存填满了我的 Docker 磁盘。
您可以通过运行看到这是问题所在
docker system df
Run Code Online (Sandbox Code Playgroud)
输出:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 22 13 7.581GB 3.899GB (51%)
Containers 15 0 2.166GB 2.166GB (100%)
Local Volumes 4 4 550.2MB 0B (0%)
Build Cache 611 0 43.83GB 43.83GB!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)
下面的命令解决了这个问题
docker builder prune
Run Code Online (Sandbox Code Playgroud)
就我而言,我运行docker system df
以找出哪个组件消耗更多空间,然后我执行docker system prune -a
清理所有悬空容器、图像等。最后,我运行docker volume rm $(docker volume ls -qf dangling=true)
清理悬空卷。
下面是按顺序执行的命令。
docker system df
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)
Run Code Online (Sandbox Code Playgroud)
小智 6
使用以下命令清理Docker:
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rmi
Run Code Online (Sandbox Code Playgroud)
就我而言,安装ubuntu-server 18.04.1(出于某些奇怪的原因)创建了一个LVM逻辑卷,其大小仅为4GB,而不是750GB。因此,当我拉图像时,我会得到这个“设备上没有剩余空间”的错误。解决方法很简单:
lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
Run Code Online (Sandbox Code Playgroud)
您的cgroup已cpuset
启用控制器.该控制器在NUMA环境中非常有用,它允许精确指定允许您运行任务的CPU /内存库.
默认情况下,强制cpuset.mems
和cpuset.cpus
未设置,这意味着您的任务没有"剩余空间",因此错误.
解决此问题的最简单方法是cgroup.clone_children
在根cgroup中启用1.在你的情况下,它应该是
echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children
Run Code Online (Sandbox Code Playgroud)
它基本上会指示系统自动初始化容器cpuset.mems
及cpuset.cpus
其父cgroup.
小智 5
不要只运行docker prune
命令。它将删除所有 docker 网络、容器和图像。因此,您最终也可能会丢失重要数据。
错误显示“设备上没有剩余空间”,所以我们只需要释放一些空间。
释放一些空间的最简单方法是删除悬空图像。
当不使用旧创建的图像时,这些图像被称为悬空图像,或者还有一些缓存图像可以删除。
使用以下命令。列出所有悬空图像图像 ID。
docker images -f "dangling=true" -q
Run Code Online (Sandbox Code Playgroud)
按图像 id 删除图像。
docker rmi IMAGE_ID
Run Code Online (Sandbox Code Playgroud)
这样你就可以释放一些空间并再次开始使用 docker 进行黑客攻击:)
归档时间: |
|
查看次数: |
194545 次 |
最近记录: |