SSH访问Ubuntu实例,Docker内Mongo执行mongorestore报目录不存在错误
解决Docker中MongoDB mongorestore找不到dump目录的问题
这个错误的核心原因很直白——你在本地db目录执行docker exec命令时,mongorestore是在容器内部运行的,但容器里并没有你本地的dump文件夹,自然会提示找不到路径。下面给你几个可行的解决方案,根据你的实际情况选择:
方案一:利用已有的容器挂载路径(如果已经挂载过本地目录)
如果你启动Mongo容器时,已经通过-v参数将本地db目录挂载到了容器内的某个路径(比如/data/restore),那只需要把命令里的路径换成容器内的挂载路径即可:
docker exec -it mongo_db_container mongorestore -d collection_name /data/restore/dump
替换/data/restore为你实际的容器内挂载路径
方案二:先将本地dump目录拷贝到容器内,再恢复
如果你的容器没有挂载本地目录,可以先把本地的dump文件夹拷贝到容器的临时目录,再执行恢复:
- 拷贝本地
dump到容器内的/tmp目录:
docker cp ./dump mongo_db_container:/tmp/
- 在容器内执行mongorestore:
docker exec -it mongo_db_container mongorestore -d collection_name /tmp/dump
方案三:用临时Mongo容器直接挂载本地目录恢复(推荐,无需修改现有容器)
这种方式不需要操作已运行的Mongo容器,直接启动一个临时Mongo镜像,挂载本地db目录后执行恢复:
docker run --rm --link mongo_db_container:mongo -v $(pwd):/data mongo mongorestore -h mongo -d collection_name /data/dump
--rm:执行完命令后自动删除临时容器--link:让临时容器能连接到你的Mongo容器-v $(pwd):/data:把当前本地db目录挂载到临时容器的/data路径-h mongo:指定Mongo服务地址为连接的容器别名
额外注意事项
- 确认dump目录结构:你的
dump文件夹下应该是<dump-name>(对应目标数据库名),里面包含.bson和.json文件;如果是单个集合的备份,需要加上--collection <集合名>参数指定具体集合。 - 验证容器名称:用
docker ps命令确认你的Mongo容器确实叫mongo_db_container,避免拼写错误。 - 认证相关:如果你的Mongo开启了用户名密码认证,需要在
mongorestore命令中添加-u <用户名> -p <密码> --authenticationDatabase admin(替换为你的认证数据库)参数。
内容的提问来源于stack exchange,提问作者rghazali
相关产品推荐
相关产品推荐

