Linux检查Docker镜像,容器的磁盘空间

本文介绍了如何在Linux系统中检查Docker镜像、容器、volumes的磁盘空间使用情况。通过检查目录`/var/lib/docker`可以获取Docker总体占用的空间。使用`docker system df`命令可以查看按组件分组的磁盘使用信息。对于镜像大小,可以使用`docker images --human`;运行中的容器大小通过`docker ps -s`;特定镜像或容器的详细信息则分别通过相应命令获取。对于volumes,查看`/var/lib/docker/volumes`和`/var/lib/docker/containers`的大小,以及使用Linux命令检查bind mounts的磁盘占用。

Linux检查Docker镜像,容器的磁盘空间

我从3A平台购买了云服务器,想知道 Docker 在你的 Linux 系统上到底占用了多少空间?

首先,所有Docker 镜像、容器和其他相关程序都位于/var/lib/docker. 你可以检查此目录的大小并获取 Docker 使用的总磁盘空间:

sudo du -sh /var/lib/docker
5G /var/lib/docker

怎么查看详细的占用情况呢?

检查 Docker 磁盘空间使用情况

了解镜像、容器、本地volumes占用了多少空间的基本的Docker方法:

docker system df

运行此命令获得按 Docker 组件分组的所有磁盘使用信息。

Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
TYPE           TOTAL       ACTIVE      SIZE        RECLAIMABLE
Images         1           0           146MB       146MB (100%)
Containers     0           0           0B          0B (0%)
Local Volumes  0           0           0B          0B (0%)

那怎么查看每个镜像磁盘空间的占用情况呢?可以使用下面的命令。

docker system df -v

检查 docker 镜像大小

查看 Docker 镜像及其大小:

docker image ls

它列出了系统上的所有 Docker 镜像,展示了一些详细信息,包括大小:

>  docker image ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY               TAG         IMAGE ID      CREATED     SIZE
docker.io/library/nginx  latest      2b7d6430f78d  7 days ago  146 MB

检查正在运行的容器大小

想知道正在运行的 Docker 容器的大小,可以使用 docker ps 命令:

docker ps --size

查看 SIZE 列:

>  docker ps --size
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                 NAMES       SIZE
8900fc2086b3  docker.io/library/nginx:latest  nginx -g daemon o...  14 seconds ago  Up 14 seconds ago  0.0.0.0:8099->80/tcp  nginx-test  1.11kB (virtual 142MB)

虚拟大小包括共享的底层镜像。

特定镜像磁盘使用情况

安装一个nginx镜像

> docker pull docker.io/library/nginx

获取容器/镜像的元数据

> docker inspect nginx

运行命令后,你会注意到以下Data小节内的三个字段GraphDriver

...
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
                "UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
            },
...

可以运行以下命令来显示nginx镜像使用的磁盘空间:

>  sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
0M /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e

特定容器磁盘使用情况

运行容器占用的磁盘空间怎么查看呢?

> docker run -itd --name nginx-test -p 8099:80 docker.io/library/nginx

运行docker ps,你会看到它正在运行:

> docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS            PORTS                 NAMES
8900fc2086b3  docker.io/library/nginx:latest  nginx -g daemon o...  4 minutes ago  Up 4 minutes ago  0.0.0.0:8099->80/tcp  nginx-test

容器名为nginx-test

$ docker inspect nginx-test

查看GraphDriver字段。这些位置是容器数据物理存储在主机系统上的位置。

...
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
                "UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
                "WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
            },
            "Name": "overlay2"
        },
...

可以du查看大小

>  sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3

与 Docker 镜像和容器不同,volumes的物理位置非常简单。位于:

/var/lib/docker/volumes/

因此,你可以查看整个 Docker volumes的磁盘空间使用情况:

>  sudo du -sh /var/lib/docker/volumes/
60K /var/lib/docker/volumes/

特定volumes磁盘使用情况

在这种情况下,主要有两种类型。一个是常规 Docker Volumes,另一个是bind mount

Docker Volumes

如果要查找特定volumes的位置,可以用docker volume ls检查volumes名或 ID。例如,我使用以下命令运行 nginx 容器,其中包含一个volumes:

docker run -itd --name nginx-test -p 8099:80 docker.io/library/nginx

自动创建一个名为nginx-test的volumes。创建一个test.md文件

$ docker exec nginx-test sh -c "touch /tmp/test.md"
$ docker exec -ti nginx-test sh
/ # ls tmp
test.md
/ # exit

docker volume ls将列出名为test-data的volumes:

$ docker volume ls
DRIVER    VOLUME NAME
local     d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local     e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local     test-data

test-datavolumes的物理位置

$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct  6 23:20 test.md

可以在du此处再次对特定volumes使用该命令!:

>  sudo du -sh /var/lib/docker/volumes/test-data/_data
0K /var/lib/docker/volumes/test-data/_data

Bind Mounts

这个比较特殊,必须使用 Linux 方法来查看磁盘空间使用情况。同时,最好先停止正在运行的容器。

$ mkdir /home/rumenz/test-data
$ docker run -ti -d --name nginx-test -v /home/rumenz/test-data:/var/lib/app/content docker.io/library/nginx

test-data将映射到容器内/var/lib/app/content上,操作test-data目录等价于操作/var/lib/app/content

>  sudo du -sh /home/rumenz/test-data
0K /home/rumenz/test-data

进入容器查看目录大小

>  sudo docker exec -ti nginx-test sh
/ # du -sh /var/lib/app/content
0K /var/lib/app/content

两个大小是相同的。

<think>好的,我现在需要帮助用户解决关于Linux查看磁盘空间命令以及Docker容器存储不足的问题。首先,我得确认用户的具体需求。用户提到了两个主要点:一是查找Linux中用于检查磁盘空间的命令,二是在Docker容器存储不足时的解决方案。接下来,我需要分步骤处理这两个问题。 首先,关于Linux查看磁盘空间的命令。我记得常用的命令有df和du。df用于显示文件系统的磁盘使用情况,而du则用于查看目录或文件的磁盘使用量。可能需要详细说明这两个命令的常用选项和示例,比如df -h可以以易读的格式显示,du -sh查看当前目录总大小,或者du -h --max-depth=1查看子目录的大小。另外,可能还需要提到ncdu这个工具,它是一个交互式的磁盘使用情况分析工具,对用户来说可能更方便。 然后是Docker容器存储不足的问题。根据用户提供的引用内容,解决方案包括迁移Docker存储目录、清理无用镜像容器、调整存储驱动配置等。首先,迁移Docker的默认存储位置到其他磁盘分区,这涉及到修改Docker的配置文件,比如daemon.json中的data-root设置,并重启Docker服务。其次,清理不再使用的镜像容器、卷和缓存,使用docker system prune命令,或者更具体的docker image prune、docker container prune等。另外,可能需要检查大文件,使用find命令查找大文件并删除。还有可能需要调整存储驱动,比如使用overlay2,这需要在配置文件中设置。 需要确保步骤准确,比如在迁移存储目录时,先停止Docker服务,复制原有数据到新位置,再修改配置,避免数据丢失。清理操作要注意确认哪些是可以删除的,避免误删重要数据。同时,提醒用户备份重要数据,尤其是在进行迁移或删除操作前。 用户提供的引用中有提到Windows系统下迁移Docker镜像存储位置,但用户的问题是关于Linux的,所以需要将相关步骤适配到Linux环境下。例如,LinuxDocker默认存储路径是/var/lib/docker,而Windows下可能是C盘的某个目录。迁移时,需要挂载数据盘到Linux的某个目录,如/data/docker,并修改daemon.json中的data-root指向新路径。 可能还需要补充一些细节,比如如何检查Docker的磁盘使用情况,使用docker system df命令查看Docker的磁盘占用情况,这样用户可以更直观地了解哪些部分占用了空间。另外,在清理时,使用docker ps -a查看所有容器,包括已停止的,然后删除不需要的容器镜像。 还需要注意权限问题,在迁移目录后,确保新目录的权限正确,Docker服务有权限访问。可能需要使用chown或chmod调整权限,否则Docker可能无法启动。 总结一下,回答的结构应该是先介绍磁盘空间查看命令,再分点说明Docker存储不足的解决方案,每个步骤详细但简洁,确保用户能逐步操作。同时,引用提供的参考资料,比如迁移存储目录的方法来自引用[2],清理大文件来自引用[3]等,正确标注引用标识。</think>### Linux查看磁盘空间命令及Docker存储不足解决方案 #### 一、Linux查看磁盘空间的常用命令 1. **`df`命令** 用于查看文件系统的磁盘使用情况,常用选项: - `df -h`:以易读格式(如GB/MB)显示磁盘空间[^3] - `df -T`:显示文件系统类型 示例输出: ```bash $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 45G 2.3G 95% / ``` 2. **`du`命令** 用于查看目录或文件的磁盘使用量,常用选项: - `du -sh <目录>`:显示目录总大小(如`du -sh /var/lib/docker`) - `du -h --max-depth=1`:查看当前目录下子目录的大小[^3] 3. **`ncdu`工具** 交互式磁盘分析工具,安装命令: ```bash sudo apt install ncdu # Debian/Ubuntu sudo yum install ncdu # CentOS ``` 使用示例: ```bash ncdu /var/lib/docker # 分析Docker存储目录占用 ``` --- #### 二、Docker容器存储不足的解决方案 ##### 1. 迁移Docker默认存储目录 **适用场景**:系统盘空间不足,需将Docker数据迁移至其他磁盘分区[^2]。 **操作步骤**: 1. 停止Docker服务: ```bash sudo systemctl stop docker ``` 2. 复制原有数据到新目录(如`/data/docker`): ```bash sudo rsync -avx /var/lib/docker/ /data/docker/ ``` 3. 修改Docker配置文件`/etc/docker/daemon.json`,添加: ```json { "data-root": "/data/docker" } ``` 4. 重启Docker服务: ```bash sudo systemctl start docker ``` ##### 2. 清理Docker无用资源 - **删除未使用的镜像容器、卷和缓存**: ```bash docker system prune --all --volumes # 谨慎操作,会删除所有未使用的资源[^3] ``` - **按条件清理**: ```bash docker image prune -a --filter "until=24h" # 删除24小时前的镜像 docker container prune --filter "until=2h" # 删除2小时前停止的容器 ``` ##### 3. 检查并删除大文件 查找Docker目录下的大文件(如大于100MB): ```bash sudo find /var/lib/docker -type f -size +100M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'[^3] ``` ##### 4. 调整存储驱动(可选) 在`/etc/docker/daemon.json`中配置高效的存储驱动(如`overlay2`): ```json { "storage-driver": "overlay2" } ``` --- #### 三、关键注意事项 - **备份数据**:迁移或清理前,确保重要容器镜像已备份。 - **权限问题**:新存储目录需赋予Docker服务权限: ```bash sudo chmod -R 755 /data/docker ``` - **监控工具**:使用`docker system df`查看Docker磁盘占用详情: ```bash $ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 15 10 5.2GB 1.1GB (21%) Containers 12 5 1.1GB 800MB (72%) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值