【AI 总结】Persisting Container Data

Persisting container data | AI 总结

容器数据持久化的必要性与解决方案

容器数据的 “临时性” 问题

  • 容器启动时基于镜像的文件和配置运行,可独立创建、修改、删除文件,且操作不影响其他容器。
  • 当容器被删除时,其内部的文件变更也会随之消失,无法满足数据库等场景下 “重启后保留数据” 的需求。

解决方案:容器卷(Volumes)

  • 定义:一种独立于单个容器生命周期的存储机制,类似 “从容器内部指向外部的快捷方式 / 符号链接”,可持久化存储数据。
  • 自动创建特性:若指定的卷不存在(如 log-data),执行挂载命令时 Docker 会自动创建该卷。
  • 数据共享能力:同一卷可挂载到多个容器,支持日志聚合、数据管道、事件驱动应用等场景的文件共享。

卷的基础管理命令

命令 功能描述 注意事项
docker volume create <volume-name> 创建指定名称的卷 示例:docker volume create log-data
docker volume ls 列出所有已创建的卷 -
docker volume rm <volume-name-or-id> 删除指定卷 仅当卷未挂载到任何容器时生效
docker volume prune 删除所有未使用(未挂载)的卷 批量清理,避免占用多余存储空间

实践操作:用卷持久化 Postgres 容器数据

核心步骤(含命令)

  1. 前提:下载并安装 Docker Desktop。

  2. 启动带卷的 Postgres 容器

    1
    docker run --name=db -e POSTGRES_PASSWORD=secret -d -v postgres_data:/var/lib/postgresql postgres:18

    postgres_data 为卷名,/var/lib/postgresql 是 Postgres 存储数据的容器内路径)

  3. 连接数据库并操作数据

    • 进入容器命令行:docker exec -ti db psql -U postgres
    • 创建表并插入数据:
      1
      2
      CREATE TABLE tasks (id SERIAL PRIMARY KEY, description VARCHAR(100));
      INSERT INTO tasks (description) VALUES ('Finish work'), ('Have fun');
    • 验证数据:SELECT * FROM tasks;(应显示 2 条插入记录)
  4. 删除旧容器并验证数据持久化

    • 停止并删除容器:docker stop db + docker rm db
    • 启动新容器挂载同一卷:docker run --name=new-db -d -v postgres_data:/var/lib/postgresql postgres:18(无需重复设置 POSTGRES_PASSWORD,仅初始化新数据库时需该变量)
    • 再次验证数据:docker exec -ti new-db psql -U postgres -c "SELECT * FROM tasks"

2. 查看卷内容(通过 Docker Desktop)

  1. 打开 Docker Desktop 仪表盘,进入 “Volumes” 视图,找到 postgres_data 卷。
  2. 选中卷名,在 “Data” 标签页可浏览文件结构,双击文件可查看 / 修改内容,右键可保存 / 删除文件。

3. 删除卷(需确保卷未挂载)

  1. 前置操作:若新容器未删除,先执行 docker rm -f new-db-f 强制停止并删除容器)。
  2. 三种删除方式
    • 仪表盘操作:在 “Volumes” 视图选中卷,点击 “Delete Volume”。
    • 命令行删除指定卷:docker volume rm postgres_data
    • 批量删除未使用卷:docker volume prune

【AI 总结】Persisting Container Data
https://blog.lllllan.cn/docker/storage/persisting-container-data/
作者
lllllan
发布于
2026年1月9日
许可协议