跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Docker 容器备份恢复与镜像管理指南

Docker 容器备份主要涉及通过 commit 创建镜像并保存为 tar 文件,或直接在本地使用。提交镜像后可推送到远程仓库。虚悬镜像指无标签且未被引用的镜像,会占用空间,可通过 prune 清理。退出容器交互终端有两种方式:exit 终止容器运行,Ctrl+P+Q 仅退出终端保持容器后台运行。掌握这些操作有助于有效管理 Docker 环境及资源。

板砖工程师发布于 2026/2/26更新于 2026/5/2926 浏览

Docker 的备份和恢复

以下是几种常见的 Docker 容器备份与恢复方法:

容器备份方法

通过提交容器创建新镜像

  • 操作步骤:
    • 查看运行中的容器:docker ps
    • 提交容器创建新镜像:docker commit -m "备份描述" -a "作者信息" <容器名或 ID> 备份镜像名:标签。例如:docker commit -m "2023 年 10 月数据库备份" -a "运维团队" mysql_container mysql_backup:v20231001
    • 将镜像保存为 tar 文件:docker save -o /path/to/backup/mysql_backup_v20231001.tar mysql_backup:v20231001。也可以使用 gzip 压缩以减少空间占用:docker save mysql_backup:v20231001 | gzip > mysql_backup_v20231001.tar.gz
  • 优缺点:
    • 优点:完整保存容器状态,包括运行内存中的变化。
    • 缺点:备份文件较大;可能包含临时文件和冗余数据。

docker commit 创建的镜像默认存储在本地的 Docker 镜像仓库中。你可以通过 docker images 命令查看所有本地存储的镜像。如果只是在本地使用这个备份镜像,或者在本地的不同 Docker 环境中使用它,可以直接使用 docker commit 创建的镜像,而不需要将其保存为 .tar 文件。例如直接使用镜像创建新容器:docker run -d --name 新容器名 备份镜像名:标签。

如果需要将镜像迁移到其他机器,或者需要将镜像存储在文件系统中以便进行备份,建议将其保存为 .tar 文件。这样做有以下好处:

  1. 便于迁移:你可以将 .tar 文件复制到其他机器上,然后使用 docker load 命令加载镜像。
  2. 便于存储:.tar 文件可以存储在文件系统中,便于进行备份和归档。
  3. 便于共享:你可以将 .tar 文件上传到文件服务器或云存储中,方便其他用户下载和使用。

保存为 .tar 文件的命令如下:

docker save -o /path/to/backup/备份镜像名_备份日期.tar 备份镜像名:标签
提交容器为镜像,并上传到镜像仓库

如果你已经有一个正在运行的容器,并希望将其提交为镜像,然后推送到镜像仓库,可以按照以下步骤操作:

  1. 提交容器为镜像
    使用 docker commit 命令。假设你的容器名称或 ID 是 your_container:

    docker commit your_container your_new_image:tag
    
    • your_container:要提交的容器名称或 ID。
    • your_new_image:想要创建的新镜像名称。
    • tag:镜像的标签,可以是版本号或其他标识符。
  2. 验证镜像
    提交完成后,使用 docker images 命令查看本地镜像列表:

    docker images
    
  3. 登录到镜像仓库
    在推送镜像之前,需登录到 Docker Hub 或其他私有镜像仓库。如果是 Docker Hub:

    docker login
    

    系统会提示输入用户名和密码。

  4. 推送镜像到仓库
    登录成功后,使用 docker push 命令。若未设置完整仓库地址,需先打标签:

    docker tag your_new_image:tag username/your_new_image:tag
    

    然后推送:

    docker push username/your_new_image:tag
    
  5. 确认镜像已推送
    推送完成后,登录到 Docker Hub 检查镜像是否成功。

注意事项:

  • 确保提交前容器中所有的数据和状态都是想要的,因为一旦提交,容器的当前状态就会被固定到镜像中。
  • 如果镜像包含敏感信息(如密码、私钥等),请在推送之前移除,以避免安全风险。
  • 如果使用私有镜像仓库,确保正确配置了访问权限和认证信息。
虚悬镜像

虚悬镜像(Dangling Image)是指没有标签(Tag)且未被任何容器引用的 Docker 镜像,在 docker images 列表中显示为 <none>:<none>。

虚悬镜像通常是在镜像构建或更新过程中产生的。例如重新构建同名镜像时,旧镜像的标签会被转移到新镜像,原镜像就会变为虚悬状态。另外,在 Dockerfile 构建过程中出错或手动取消,未命名的中间层镜像会残留,多阶段构建中未被最终镜像引用的中间层也可能成为虚悬镜像。当手动删除一个镜像的标签,而这个镜像没有被其他标签引用时,它也会变成虚悬镜像。

虚悬镜像会占用磁盘空间,随着项目的迭代和开发环境的频繁变更,其数量可能会不断增加,导致镜像列表变得杂乱无章,增加管理难度。可以使用 docker image ls -f dangling=true 命令来查看所有虚悬镜像,使用 docker image prune 命令来清理不再使用的虚悬镜像,也可以通过 docker rmi $(docker images -f "dangling=true" -q) 命令直接删除所有虚悬镜像。

两种退出容器交互终端的方式

在使用 Docker 容器时,Ctrl + P + Q 和 exit 是两种退出容器交互终端的方式,但它们的作用和结果有本质区别,核心差异在于是否会终止容器运行。

  1. exit 退出容器

    • 操作:在容器的交互式终端中输入 exit 并回车。
    • 效果:直接退出容器的交互式终端,同时终止容器的运行(容器状态变为 exited)。
    • 原理:容器的主进程与交互式终端绑定,输入 exit 会终止主进程,而 Docker 容器的生命周期依赖主进程——主进程结束,容器就会停止。
  2. Ctrl + P + Q 退出容器

    • 操作:在容器的交互式终端中,先按 Ctrl + P,再按 Ctrl + Q(注意是分两次按,不是同时按)。
    • 效果:仅退出容器的交互式终端,回到宿主机的命令行,容器继续在后台运行(容器状态保持 running)。
    • 原理:这是 Docker 提供的'脱离终端但不终止容器'的快捷键,本质是将终端与容器的主进程'解绑',但主进程仍在运行,因此容器不会停止。

对比总结

操作方式是否退出终端容器状态变化适用场景
exit是从 running 变为 exited完成操作后不再需要容器运行(如临时测试)
Ctrl + P + Q是保持 running需要容器在后台继续运行(如运行服务、进程)

实操验证

  1. 用 exit 退出:输入 exit 后,回到宿主机终端,执行 docker ps -a 会看到容器状态为 exited。
  2. 重新启动容器并进入,用 Ctrl + P + Q 退出:
    docker start test_container
    docker exec -it test_container /bin/bash
    
    按 Ctrl + P + Q 退出后,执行 docker ps 会看到容器仍处于 running 状态。

总结

  • 若想停止容器,用 exit;
  • 若想让容器在后台继续运行,仅退出终端,用 Ctrl + P + Q。这两种方式的选择,取决于你是否需要容器在退出终端后继续提供服务(如运行 Web 服务、数据库的容器通常需要后台运行)。

目录

  1. Docker 的备份和恢复
  2. 容器备份方法
  3. 提交容器为镜像,并上传到镜像仓库
  4. 虚悬镜像
  5. 两种退出容器交互终端的方式
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux 系统信息查看核心命令全解析:跨发行版适配
  • 鸿蒙 AI 应用的技术架构解析
  • Java List 按对象属性值连续分割为多个子 List
  • Flutter for OpenHarmony 实战:通义万相 AIGC 联调与相册持久化
  • MySQL 迁移至金仓:高兼容自动化与低成本落地实战
  • Python 数据分析通用全流程指南
  • OpenClaw 多端交互实测指南:Web/TUI/钉钉集成配置
  • Retinaface+CurricularFace 人脸识别服务 Kubernetes StatefulSet 部署实战
  • Java GUI 组件详解:对话框与 JOptionPane 使用
  • FPGA 电机控制:3 大技术难点与工程实践
  • C++ STL 容器入门:set 与 map 详解
  • 人工智能对上位机系统的全面重塑与影响分析
  • C++ 多线程同步:条件变量 condition_variable 实战
  • GitHub Actions 集成 PyTorch-CUDA-v2.6 镜像实现 CI/CD 自动化
  • Linux Shell 简易实现:原理、设计与实践
  • C/C++标量初始化警告:braces around scalar initializer 解析与修复
  • 基于 AI 辅助的 Java 在线教育平台设计与实现
  • 动态规划经典题解:按摩师、打家劫舍、删除点数与粉刷房子
  • C++ 智能指针详解:原理、实现与内存管理最佳实践
  • MCPHost:命令行下大模型与外部工具交互的实践

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online