【问题标题】:Docker images disappearing over timeDocker 镜像随着时间的推移而消失
【发布时间】:2020-05-30 18:52:49
【问题描述】:

我加载了一些正在运行的 docker 镜像

docker load --input <file>

然后我可以在执行时看到这些图像

docker image ls

一段时间后,图像开始消失。每隔几分钟就会列出越来越少的图像。我还没有运行任何图像。这个问题的原因可能是什么?

编辑:这个问题出现在 minikube VM 中的 docker 上。

【问题讨论】:

  • 你有没有调用docker prune或一些docker rm命令的crons?我们在公司服务器上这样做是因为 Docker 默认情况下不会删除任何图像(甚至不会删除未使用的图像)。如果没有一些清理例程,Docker 很快就会使用大量空间(尤其是在开发/测试环境或更大的 Docker 服务器上)。
  • 其实这是我根据一些在线教程搭建的本地开发环境。因此,如果没有开箱即用的此类作业,那么不,我没有配置任何此类作业。当看到我的图像消失时,我感到非常惊讶,这对我来说真的很奇怪。但是,图像确实很大,例如大约。 2 GB。
  • 你可以试试docker image ls --all。默认情况下,Docker 只隐藏中间图像。我没有太多手动加载图像文件,但是当不使用--all 开关时,它们可能也会被隐藏。
  • 根据图片:是的,它们可能很大。但这在很大程度上取决于多种因素,例如使用的软件/依赖项、作者的经验等等。 2GB 对于 Docker 来说是比较大的。大多数图像不超过几百 MB。有些要小得多。例如 alpine 上的 nginx(专为小图像设计)占用不到 20MB。但也有大的有多个 GB。尤其是构建/开发图像。
  • 我编辑了初始帖子,其中包含有关 minikube VM 内的 docker 存在此问题的信息。

标签: docker minikube


【解决方案1】:

由于您提到Docker 守护进程在minikube VM 中运行,我假设您可能会遇到K8s Garbage collection 机制,该机制将系统利用率保持在适当的水平并减少未使用容器的数量(从镜像构建)通过调整特定的阈值。

这些驱逐thresholds完全由Kubeletk8s节点代理管理,根据kubeletconfiguration file中传播的参数(标志)清理不确定的图像和容器。

因此,我想您可以通过查看特定阈值来调查 K8s 驱逐行为,在 kubelet 配置文件中进行调整,该配置文件由 minikube bootstrapper 在以下路径 /var/lib/kubelet/config.yaml 中生成。

【讨论】:

  • 就是这样!我现在制作了具有更大磁盘(覆盖默认值)的新 minikube VM,并且不再出现问题。谢谢!
【解决方案2】:

正如@mk_sta 中提到的解决您需要的问题的答案:

使用

创建或编辑/var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
evictionHard:
    imagefs.available: "5%"

默认值为 15%

minikube stop
minikube start --extra-config=kubelet.config=/var/lib/kubelet/config.yaml

或者在 docker 分区上释放更多空间。

https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/#create-the-config-file

https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#hard-eviction-thresholds

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 2020-01-17
    • 2011-08-17
    • 2014-02-04
    • 1970-01-01
    • 2018-06-17
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多