已停止的 docker 容器中的磁盘管理(清理)

Disk management (cleanup) in a stopped docker container

我是 运行 我的虚拟机上的一个 elasticsearch docker 容器,最近遇到 elasticsearch 故障,容器刚刚停止。原因 - 我的 ssd 没电了 space.

我可以轻松清理索引,但真正的问题是我实际上无法启动 docker 来执行此操作。容器在启动后立即停止,无法通过网络 UI 或 bash 进行清理 space.

如何清理我无法启动的已停止容器中的磁盘?

假设您使用的是 official elasticsearch image,Elasticsearch 数据目录将是一个卷(请注意该图像 Dockerfile 中的 VOLUME /usr/share/elasticsearch/data 语句)。

您现在可以启动另一个容器,使用 --volumes-from 选项安装原始容器的卷以执行您认为必要的任何清理任务:

docker run --rm -it \
    --volumes-from=<original-elasticsearch-container> \
    ubuntu:latest \
    /bin/bash

如果失败,您还可以在 Elasticsearch 容器上 运行 docker inspect 并在主机文件系统中找到该卷的目录(假设您使用的是默认 local 卷driver)。在 JSON 输出中查找 Mounts 部分:

"Mounts": [
    {
        "Name": "<volume-id>",
        "Source": "/var/lib/docker/volumes/<volume-id>/_data",
        "Destination": "/usr/share/elasticsearch/data",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],

"Source" 属性 将描述卷在主机文件系统上的位置。当容器启动时,这个目录被简单地绑定到容器的挂载命名空间中;您在主机上的此目录中所做的任何更改都将在启动时反映在容器中。