【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据

‌启动临时 MongoDB 容器、挂载数据卷运行数据库服务,并通过备份文件恢复数据

  • 1.命令分解与功能说明
    • 1.1.启动一个临时 MongoDB 容器‌,并进入交互式终端
      • (1)执行命令
      • (2)实现功能‌
      • (3)参数说明
    • 1.2.在容器内手动启动 MongoDB 服务‌,并指定数据存储路径
      • (1)执行命令
      • (2)实现功能‌
      • (3)参数说明
    • 1.3.恢复指定备份文件到 MongoDB 数据库‌
      • (1)执行命令
      • (2)实现功能‌
      • (3)参数说明
      • (4)确认恢复完成
  • 2.组合使用场景
  • 3.注意事项
  • 4.流程总结
  • 5.问题记录
  • 6.命令详解,输出字段解释
    • 1.docker ps -a

1.命令分解与功能说明

1.1.启动一个临时 MongoDB 容器‌,并进入交互式终端

(1)执行命令

docker run -it -p 127.0.0.1:27017:27017/tcp --rm --entrypoint bash -v /data/script/volume/data/mongodb:/data/mongodb 容器ID

(2)实现功能‌

启动一个 临时 MongoDB 容器‌,并进入交互式终端。

(3)参数说明

  • -it:以交互模式运行容器(支持命令行操作)。
  • -p 127.0.0.1:27017:27017/tcp:将容器的 27017 端口映射到主机的本地 27017 端口(仅允许本机访问)。
  • –rm:容器退出后自动删除(适用于临时测试场景)。
  • –entrypoint bash:覆盖默认入口命令,直接启动 Bash 终端。
  • -v /data/script/volume/data/mongodb:/data/mongodb:将主机目录挂载到容器,实现数据持久化(主机目录:容器)。
  • 容器ID:MongoDB 镜像 ID。(容器内现有镜像,可通过docker images查看选择)

1.2.在容器内手动启动 MongoDB 服务‌,并指定数据存储路径

不同版本mongod的所在路径可能不同,可以先查找命令:
find / -name mongod,找到路径为/usr/bin/mongod

(1)执行命令

/usr/bin/mongod --dbpath /data/mongodb/‌

(2)实现功能‌

在容器内手动启动 MongoDB 服务‌,并指定数据存储路径

(3)参数说明

  • –dbpath /data/mongodb/:使用挂载的卷目录作为数据库存储路径,确保数据持久化

1.3.恢复指定备份文件到 MongoDB 数据库‌

注意版本兼容性‌:mongorestore 版本需与 MongoDB 服务版本一致(如 5.0 的备份不支持恢复到 4.4 实例)
文件类型:此时的backup_mongodb-备份日期序号为zip文件,如非zip文件无需增加–gzip参数,并根据实际文件类型选择适合的参数。
新开一个shell页面:此条命令另开一个shell界面,在本地服务器执行。

(1)执行命令

./mongorestore -h 127.0.0.1:27017 --gzip --drop /data/backup/backup_mongodb-备份日期序号/‌

(2)实现功能‌

恢复指定备份文件到 MongoDB 数据库‌

(3)参数说明

  • -h 127.0.0.1:27017:连接到本机 MongoDB 服务。
  • –gzip:解压压缩格式的备份文件。
  • –drop:覆盖目标数据库的现有集合。
  • /data/backup/backup_mongodb–备份日期序号/:备份文件路径(需确保可访问该路径)

(4)确认恢复完成

最后输出done,看到done日志后,在1.2的shell页面里,退出容器:

ctrl+C
exit

验证数据是否恢复

2.组合使用场景

此命令组合适用于以下场景:
(1)本地测试与数据恢复‌
快速启动临时 MongoDB 容器,避免污染生产环境。
通过挂载卷保留数据(即使容器删除,数据仍保留在主机目录 /data/script/volume/data/mongodb)。
‌(2)备份验证‌
将备份数据恢复到临时数据库,验证备份文件的完整性和正确性。
‌(3)开发调试‌
在隔离环境中调试数据库操作,测试数据迁移或恢复流程。

3.注意事项

(1)路径一致性‌
确保主机目录 /data/script/volume/data/mongodb 和 /data/backup/backup_mongodb-备份日期序号/ 存在且可读写。
‌(2)容器网络限制‌
-p 127.0.0.1:27017:27017/tcp 仅允许本机访问 MongoDB 服务,外部无法连接。
‌(3)备份文件兼容性‌
备份文件需由 mongodump 生成,且目录结构与版本兼容目标 MongoDB 实例。

4.流程总结

该流程以最小资源占用实现数据恢复验证,适合快速测试场景。

启动临时容器
手动运行数据库服务
强制恢复备份数据
退出后自动清理容器

5.问题记录

  1. 错误 Failed: error connecting to db server: no reachable servers
  • 原因‌:本地 MongoDB 服务未运行或端口被防火墙拦截。
  • ‌解决‌:检查服务状态(ps aux | grep mongod)和端口可达性(telnet 127.0.0.1 27017)。暴露端口,vi docker-compose.yaml,在ports:里按照现有格式增加:- 27017:27017
  1. 在启动一个临时 MongoDB 容器‌,并进入交互式终端,执行命令时报错:
  • 执行指令:docker run -it -p 127.0.0.1:27017:27017/tcp --rm --entrypoint bash -v /data/script/volume/data/mongodb:/data/mongodb 容器ID
  • 报错内容:docker: Error response from daemon: driver failed programming external connectivity on endpoint serene_perlman (60ba0d087e4c4c77d05c045523a31da46faed5285169e809549609b4215f850c): Bind for 127.0.0.1:27017 failed: port is already allocated.
    ERRO[0000] error waiting for container: context canceled
  • 解决:
    避免手动杀 Docker 进程,当端口被占用且无法通过 docker stop 或 docker rm 清理时(例如容器状态异常、僵尸进程残留),重启 Docker 是最直接的解决方案。

生产环境的替代方案‌ 若环境不允许重启 Docker,可尝试以下步骤:
‌查找占用端口的容器‌:
docker ps --format “table {{.ID}}\t{{.Names}}\t{{.Ports}}” | grep 27017
停止相关容器‌:
docker stop <容器名称或ID>
‌清理残留进程‌:
pkill -f “docker-proxy.*27017” # 强制终止残留的 docker-proxy 进程

(1)确认容器状态‌:

docker ps -a  # 检查容器是否存在及状态

(2)释放端口冲突‌:

  • 通过 Docker 停止容器‌:
docker stop 容器ID  # 使用容器名称或完整ID
  • 若容器已不存在但端口仍占用‌:
service docker restart  # 直接重启 Docker 服务

(3)‌验证端口释放‌:

netstat -ltnp | grep 27017  # 确认端口是否释放

(4)‌重新启动容器‌:

service docker restart  # 确保有权限执行

(5)确认 Docker 服务重启成功‌:

service docker status  # 应显示 "active (running)"

6.命令详解,输出字段解释

1.docker ps -a

‌(1)命令作用‌
列出 Docker 宿主机上的 ‌所有容器‌,包括 ‌正在运行的容器‌ 和 ‌已停止的容器‌。
默认的 docker ps 仅显示运行中的容器,而 -a 参数扩展了查询范围。
‌(2)输出字段解释‌
执行 docker ps -a 后,输出包含以下关键信息

字段名称说明
‌CONTAINER ID‌容器的唯一标识符(短格式,默认截断显示)
IMAGE‌容器使用的镜像名称
COMMAND‌容器启动时执行的初始命令
‌CREATED‌容器的创建时间命令
‌STATUS‌容器状态(如 Up X minutes 表示运行中,Exited (X) minutes ago 表示已停止)
PORTS‌容器与宿主机之间的端口映射信息
‌NAMES‌容器的自定义名称(未指定时由 Docker 自动生成)

(3)常用参数‌

参数作用
‌-q‌仅显示容器 ID,适用于批量操作(如删除所有容器)8
‌–no-trunc‌显示完整的容器 ID 和命令(默认截断过长内容)8
‌–filter‌按条件过滤容器(如 status=exited 显示已停止的容器)45

(4)示例‌
‌列出所有容器‌(包括已停止的):

docker ps -a

‌仅显示容器 ID‌:

docker ps -a -q

‌过滤已停止的容器‌:

docker ps -a --filter "status=exited"

‌(5)注意事项‌
容器未显示的可能原因‌:

  • Docker 服务异常(需检查服务状态 systemctl status docker)。
  • 数据目录配置冲突(如 Snap 与传统安装方式混用导致路径不一致)。
  • 日志驱动配置错误(需检查 /etc/docker/daemon.json)。

数据安全‌:

  • 使用 docker ps -a 结合 docker inspect <容器ID> 可获取容器详细信息(如挂载卷、网络配置)。
  • 删除容器前建议通过 docker logs <容器ID> 查看日志。

(6)总结‌
docker ps -a 是 Docker 容器管理的核心命令之一,通过参数组合可灵活查看容器状态、定位问题及执行批量操作。若遇到容器列表异常,需优先排查 Docker 服务状态及配置文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最新 MCP 战神手册 08】工具使用详解:实现 AI 行动

文章目录 1. 开始啦!2. 第一部分:设计高效且安全的工具3. 第二部分:定义工具蓝图——参数、输出与约束条件4. 第三部分:弥合差距:LLM 兼容性(函数调用)5. 第四部分:实施与测试的最佳实践1. 开始啦! 在前几章中,我们将工具介绍为 AI 模型在 MCP 客户端引导下向 MCP 服…

介绍 IntelliJ IDEA 快捷键操作

IntelliJ IDEA 快捷键操作 1. 编辑与导航2. 查找与替换3. 调试与运行4. 导航与视图5. 重构与生成6. 高级快捷键&#xff08;提高效率&#xff09;注意事项 IntelliJ IDEA 是一款功能强大的集成开发环境&#xff0c;掌握其常用快捷键可以显著提升开发效率。但是有些小伙伴并不清…

Javascript 中作用域的理解?

一、作用域的类型 1. 全局作用域&#xff08;公司大门外&#xff09; 范围&#xff1a;整个 JavaScript 文件变量&#xff1a;像贴在公告栏上的信息&#xff0c;所有人可见例子&#xff1a;const companyName "阿里"; // 全局变量&#xff0c;任何地方都能访问 fu…

Leetcode刷题记录22——滑动窗口最大值

题源&#xff1a;https://leetcode.cn/problems/sliding-window-maximum/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述&#xff1a; 思路一&#xff1a; 暴力遍历法&#xff0c;通过一个长度为k的滑动窗口遍历nums&#xff0c;将其中最大的数依次记…

Apache Flink的架构设计与运行流程说明

在大数据领域&#xff0c;实时计算的重要性随着业务需求的爆发式增长愈发凸显。从电商的实时销量监控到金融的高频交易风控&#xff0c;从物联网设备的实时告警到社交平台的热点追踪&#xff0c;企业对“秒级甚至毫秒级”数据处理能力的需求已成为刚需。在众多实时计算框架中&a…

经典算法 最长单调递增子序列

最长单调递增子序列 问题描述 找出由n个数组成的序列的最长单调递增子序列。 示例输入 9 2 1 5 3 6 4 8 9 7示例输出 5示例输入 6 5 6 7 1 2 8示例输出 4c代码(动态规划 O(n^2)) #include<bits/stdc.h>using namespace std;int main() {int n, ans 0;cin >&g…

【语法】C++继承中遇到的问题及解决方法

目录 1.子类构造函数中初始化父类成员 2.子类显式调用父类的析构函数 第一种说法&#xff1a;重定义 反驳&#xff1a; 第二种说法&#xff1a;operator~ 3.因编译器版本过低而出现错误 贴主在学习C的继承时&#xff0c;遇到了很多问题&#xff0c;觉得很变态&#xff0c…

前缀和 后缀和 --- 寻找数组的中心下标

题目链接 寻找数组的中心下标 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为…

NVIDIA --- 端到端自动驾驶

前言 参加了NVIDIA 高级辅助驾驶开发者实验室的活动&#xff0c;本次活动基于 NVIDIA 汽车行业的端到端解决方案——DRIVE AGX™ 平台&#xff0c;实现高级别智能和安全性的软硬件开发工具和 AV 基础设施。并且NVIDIA自动驾驶实验室推出了一系列自动驾驶算法最新的前沿研究视频…

SQL实战:03之SQL中的递归查询

文章目录 概述SQL 中的递归实现题目一:分析组织层级题解题目二:树节点求解题解步骤一&#xff1a;通过递归查询出每个节点的上级节点和下级节点分布步骤二&#xff1a;分组统计 概述 最近刷题时遇到了一道需要根据组织层级来统计各个层级的一些数据&#xff0c;当时碰到时的第…

MySQL 语法与基础完全指南

MySQL 是最流行的开源关系型数据库管理系统之一&#xff0c;广泛应用于 Web 应用程序开发。本文将全面介绍 MySQL 的基础知识和完整语法结构。 一、MySQL 基础概念 1. 数据库基本术语 数据库(Database): 存储数据的集合 表(Table): 数据以表格形式组织 列(Column): 表中的一…

【Sqlalchemy Model转换成Pydantic Model示例】

【Sqlalchemy Model转换成Pydantic Model示例】 由于Sqlalchemy和Pydantic的模型字段类型可能有差异, 所以需要一个通用的装换类 def sqlalchemy_to_pydantic_v2(sqlalchemy_model, pydantic_model):"""通用函数&#xff0c;将 SQLAlchemy 模型实例转换为 Pyd…

2025年欧洲西南部大停电

2025年4月28日&#xff0c;欧洲西南部出现大规模停电&#xff0c;西班牙、葡萄牙和法国南部均受到影响。有报道指出停电可能与 欧洲电网出现问题有关&#xff0c;但最终原因尚未确定。由于停电&#xff0c;上述地区的交通和通信服务均受到严重影响&#xff0c;交通信号灯停止工…

Java EE初阶——计算机是如何工作的

1. cpu 冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; • CPU 中央处理器: 进⾏算术运算和逻辑判断. • 存储器: 分为外存和内存, ⽤于存储数据(使⽤⼆进制⽅式存储) • 输⼊设备: ⽤⼾给计算机发号施令的设备. • 输出设备: 计算机个⽤⼾汇报结果的设…

飞鸟游戏模拟器 1.0.3 | 完全免费无广告,内置大量经典童年游戏,重温美好回忆

飞鸟游戏模拟器是一款专为安卓用户设计的免费游戏模拟器&#xff0c;内置了大量经典的童年游戏。该模拟器拥有丰富的游戏资源&#xff0c;目前已有约20,000款游戏&#xff0c;包括多种类型如冒险、动作、角色扮演等。用户可以直接搜索查找想要玩的游戏进行下载并启动。游戏库中…

网络爬取需谨慎:警惕迷宫陷阱

一、技术背景:网络爬虫与数据保护的博弈升级 1. 问题根源:AI训练数据爬取的无序性 数据需求爆炸:GPT-4、Gemini等大模型依赖数万亿网页数据训练,但大量爬虫无视网站的robots.txt协议(非法律强制),未经许可抓取内容(如新闻、学术论文、代码),引发版权争议(如OpenAI被…

Qwen3简介:大型语言模型的革命

Qwen3简介&#xff1a;大型语言模型的革命 Qwen系列语言模型的最新发布——Qwen3&#xff0c;标志着人工智能&#xff08;AI&#xff09;技术的一次重大飞跃。基于前代版本的成功&#xff0c;Qwen3在架构、推理能力和多项先进功能上都取得了显著提升&#xff0c;正在重新定义大…

MODSIM选型指南:汽车与航空航天企业如何选择仿真平台

1. 引言 在竞争激烈的汽车与航空航天领域&#xff0c;仿真技术已成为产品研发不可或缺的环节。通过在设计阶段验证概念并优化性能&#xff0c;仿真平台能有效缩短开发周期并降低物理样机制作成本。 MODSIM&#xff08;建模与仿真&#xff09;作为达索系统3DEXPERIENCE平台的核…

linux 内核 debugfs 使用介绍

一&#xff1a;概述 debugfs 是 Linux 内核提供的一个特殊的虚拟文件系统&#xff0c;用于 暴露内核模块&#xff08;如驱动&#xff09;内部的调试信息或控制接口&#xff0c;供开发者、调试人员实时查看和排查问题。即 debugfs 就是一个“调试专用的 /proc 或 /sys”&#xf…

ZYNQ笔记(十五):PL读写PS DDR(自定义IP核-AXI4接口)

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;PL 端自定义一个 AXI4 接口的 IP 核&#xff0c;通过 AXI_HP 接口对 PS 端 DDR3 进行读写 测试&#xff0c;读写的内存大小是 4K 字节&#xff0c; 目录 一、介绍 &#xff08;1&#xff09;…