欢迎光临
我们一直在努力

docker-compose如何清理volumn

在使用 VPS 或公有云虚拟机搭建服务时,Docker 和 Docker Compose 是常用的部署工具。然而,如果不注意清理,Docker 留下的持久化卷(Volume)会迅速占用大量的磁盘空间,尤其是数据库或日志相关的卷。本文将详细指导您如何安全、彻底地清理 Docker Compose 创建和遗留的持久化卷。

准备工作

您需要一个使用 Docker Compose 部署的项目。我们以一个简单的 PostgreSQL 数据库服务为例,它定义了一个名为 postgres_data 的卷来存储数据。

示例 **docker-compose.yml 文件:**

version: '3.8'

services:
  db:
    image: postgres:14
    container_name: my_db_container
    restart: always
    volumes:
      # 绑定到下面的具名卷
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: mysecretpassword

volumes:
  postgres_data:
    # 设置卷的驱动和配置,这里使用默认设置

首先,运行服务并创建数据卷:

docker-compose up -d

运行后,您可以通过以下命令查看已创建的卷(假设项目目录名为 myproject):

docker volume ls | grep myproject
# 可能会看到类似:myproject_postgres_data

步骤一:使用 down -v 清理当前项目的卷(推荐)

清理 Docker Compose 部署的项目时,最安全且推荐的方式是使用 docker-compose down 命令,并添加 -v–volumes 参数。

这个命令的作用是:停止并移除容器、移除网络,同时移除 Compose 文件中明确定义的具名卷(Named Volumes)。

注意: 只有在 docker-compose.yml 文件中显式声明的卷才会被这个命令移除。这通常是你想要移除的数据卷。

执行清理命令

进入您的项目目录,执行:

docker-compose down -v

输出示例:

Stopping my_db_container ... done
Removing my_db_container ... done
Removing network myproject_default
Removing volume myproject_postgres_data

通过再次检查卷列表,您会发现 myproject_postgres_data 卷已经被删除,磁盘空间得到释放。

步骤二:清理悬空卷(Dangling Volumes)

有时,由于操作失误或容器崩溃,系统可能会残留一些悬空卷(Dangling Volumes)。悬空卷是指那些不再被任何容器引用的匿名卷(Anonymous Volumes)。虽然 docker-compose down -v 已经处理了具名卷,但清理悬空卷对于维护磁盘空间至关重要。

查找悬空卷

您可以使用过滤器找到这些未被使用的卷:

docker volume ls -f dangling=true

批量清理悬空卷

使用 docker volume prune 命令可以一键清理所有悬空卷。此操作是安全的,因为它只删除没有容器引用的卷。

docker volume prune

系统会提示您确认操作:

WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 1.5GB

如果您想跳过确认步骤,直接清理(适合脚本自动化):

docker volume prune -f

步骤三:手动移除特定具名卷

如果您不使用 docker-compose down -v,而是手动停止容器,那么卷会保留下来。如果您想移除一个特定的具名卷(例如,您的项目名为 myproject,卷名为 postgres_data),您需要先确定其全名,然后使用 docker volume rm

  1. 确定卷的全名:
    docker volume ls | grep postgres_data
    # 假设全名为 myproject_postgres_data
    
  2. 移除卷:
    docker volume rm myproject_postgres_data
    

重要提示: 在执行 docker volume rm 之前,请确保没有任何容器正在使用这个卷,否则命令会失败。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » docker-compose如何清理volumn
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址