当前位置: 首页 > 知识库问答 >
问题:

Docker容器不断增长

顾涵衍
2023-03-14

我有一个循环中的python脚本

  1. 将AWS S3中的视频块下载到/filename

然后继续循环,直到AWS SQS队列为空。

剧本很棒!我已经运行了几个月了。硬盘空间会有所不同,但永远不会达到5%左右,这取决于视频的大小。

我决定把这个脚本放在docker容器中,运行docker compose,这样我就可以一次运行一堆脚本。

问题是硬盘充满了!我知道5运行磁盘上的空间会更高,但是当我完成处理后,文件会被删除。

但对于docker来说,它似乎是一个缓存之类的东西。我把每个容器都装了进去,它们运行得很好。删除旧文件和所有文件。

不知道在docker容器中和作为服务运行之间的区别会对高清产生什么影响。

此外,当我“rm”docker容器时,硬盘空间会释放出来。我运行“docker ps-s”,集装箱上的空间并不疯狂。就好像当你在docker容器中“rm”一个文件时,它永远不会真正“rm”它。

共有3个答案

卞浩漫
2023-03-14

要看两件事:

>

  • 容器的读/写文件系统层。您可以通过特定容器id上的docker diff了解这里发生了什么,以查看容器所做的所有文件系统更改。

    容器日志。您可以使用docker日志查看它们。在长时间运行的容器上,这些日志可能会过多。请参阅此答案,了解限制一个容器上的日志大小或使这些限制成为所有新创建容器的默认值的过程

    最后,如果您在虚拟机(例如docker Desktop)中运行docker,那么您可能会看到文件系统更改扩展了写时拷贝虚拟机文件系统,这不容易撤消。(底层设备不知道操作系统不再使用这些字节,因此一旦零字节被数据替换,即使FS不再指向这些字节,它们也会被假定在使用中。)然而,由于您表示移除容器可以释放空间,这不太可能是您的问题。

    这也不太可能由卷来解决,因为应用程序对卷进行的文件系统更改与对容器读写层的更改相同。它所能做的就是在容器之间保存这些更改。

  • 羊光辉
    2023-03-14

    我建议您使用卷,并将这些卷挂载到容器中。卷上的更改是即时的,而不是对容器文件系统所做的更改(在您删除容器之前不会真正删除)。

    看看这里的医生

    汪阳飇
    2023-03-14

    如果您正在将映像下载到一个未从主机映射到卷的目录中,docker容器将不会释放已使用的磁盘空间,直到容器被删除——容器中的任何操作都是短暂的,但主机不知道容器中发生的事情的状态。

    从这个意义上讲,它很像一个虚拟机映像,由一个文件支持,该文件只会根据需要增长,但不会缩小。Docker有一个目录,用于运行跟踪更改的容器。在主机上,您可以在/var/lib/docker/containers中找到支持正在运行的容器的文件/

    如果您需要容器共享磁盘空间,我建议您将主机中的共享卷映射到每个docker容器映像以共享。

    试试下面的方法

     docker run -ti -v /host/dir:/container/dir ubuntu bash
    

    上面的程序将在终端交互模式下运行ubuntu映像,并在运行的容器中安装主机的目录/host/dir。容器写入/容器/dir的任何内容都将显示在主机/host/dir中,安装它的任何其他容器也将看到更改。

    请记住,在共享卷中完成的任何操作都会被装载它的所有容器看到,因此在添加和删除文件/目录时要小心!

     类似资料:
    • 我今天使用应用程序容器/媒体维基泊出程序映像部署了MediaWiki的一个实例,我现在遇到了一个新问题,我找不到任何线索。尝试使用以下命令附加到媒体维基前端容器后: 由于我忽略的原因,它在我的配置中回答< code >终止,并尝试: 我确实收到了一些接近错误消息的内容: 这是我的新问题,因为这个容器永远不会停止重新启动。我可以看到,使用<code>docker ps-a。 问题是,我能够停止容器(

    • 1、启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。 1.1 新建并启动 所需要的命令主要为 docker run。 例如,下面的命令输出一个 “Hello World”,之后终止容器。 $ sudo docker run ubuntu:14.0

    • 我有一个不断重启的docker容器; 我希望我有一个简单的方法来查看错误日志,了解它为什么重新启动。 我在Docker上读到:容器一直在重新启动 我试试; 有没有一种简单的方法可以找出docker容器不断重启的原因?

    • 我有一个容器,我想停止,但当我做一个它挂起,永远不会停止它。 我试过正常的和

    • 我有一个在节点容器和redis容器中运行的express API。当试图将节点容器连接到redis时,我遇到了以下错误。

    • 设置docker容器(kafka,zookeeper)并试图从另一个容器(发布和)消费时,会收到以下错误:KafkaError{code=leader_not_available,val=5,str=“broker:Leader not available”}在发布或消费时没有额外的错误指示。在测试与的连接性时,我收到了预期的结果。 docker-compose.yml: Ubuntu@stage