mongodb - 每次删除集合时,docker-compose 恢复 mongo 数据库
问题描述
我希望能够重新创建一些在删除和docker-compose up
调用 mongo-data 文件夹时转储的基本数据。我面临的问题是应用程序没有mongo
这些是我的文件:docker-compose.yml
version: "3"
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- .:/testapp
environment:
DB_URL: mongodb://test_mongo/appdb
depends_on:
- mongo
mongo:
image: "mongo:4.4.4"
restart: always
container_name: test_mongo
ports:
- "27017:27017"
- "27018:27018"
volumes:
- ./mongo-data:/data/db
Dockerfile:
FROM node:14.15.5
RUN mkdir -p /testapp
WORKDIR /testapp
EXPOSE 3000
ENTRYPOINT ["./entrypoint.sh"]
入口点.sh:
#!/bin/bash
sh ./__backup__/db/restore.sh
sh ./__backup__/app/restore.sh
yarn install
yarn start:dev
备份/app/restore.sh:
#!/bin/bash
if [[ ! -d '/testapp/uploads' ]]
then
tar -xvf ./uploads.tar.gz /testapp/
fi
备份/app/restore.sh:
#!/bin/bash
until mongo --eval "print(\"waited for connection\")"
do
sleep 1
done
if [[ ! -d '/testapp/mongo-data' ]]
then
mongorestore --archive ./db.dump
fi
在mongo服务启动或从应用程序运行mongo之后,是否有运行这些resotre.sh文件?
解决方案
如果我正确理解了这个问题,您希望每次启动应用程序时都将 MongoDB 恢复到某个状态,并且您会询问在 MongoDB 容器启动后是否有办法做到这一点。
有一个名为docker-compose-wait的工具,引用自其 GitHub README,它是一个小型命令行实用程序,用于在使用 docker-compose 时等待其他 docker 映像启动。
使用它相当简单。将其添加到映像中,运行/wait
以等待服务启动,然后继续下一步。
因此,根据您当前的设置,您的 Dockerfile 可能是这样的:
FROM node:14.15.5
## Add the wait script to the image
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.9.0/wait /wait
RUN chmod +x /wait
RUN mkdir -p /testapp
WORKDIR /testapp
ADD . .
EXPOSE 3000
## Launch the wait tool and then your entrypoint.sh
ENTRYPOINT /wait && /testapp/entrypoint.sh"
您entrypoint.sh
已经在其中编写了调用恢复脚本。在您的 docker-compose.yml 中,添加环境变量以设置要等待的服务。
version: "3"
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- .:/testapp
environment:
DB_URL: mongodb://test_mongo/appdb
WAIT_HOSTS: mongo:27017
depends_on:
- mongo
mongo:
image: "mongo:4.4.4"
restart: always
container_name: test_mongo
ports:
- "27017:27017"
- "27018:27018"
volumes:
- ./mongo-data:/data/db
推荐阅读
- javascript - 拍摄 Windy(传单)截图
- python - 大熊猫中按日期分组的分类区域堆栈图
- javascript - Js-IPFS 错误:cid.toBaseEncodedString() 不是函数
- android - 在 android 中使用 TextRecognizer
- bash - zsh:如何将变量扩展为多个参数?
- r - 使用 R 查找以前的素数
- android - Android x86 平台上surfaceflinger 进程的内存增长
- python - VOLTTRON 执行器代理 revert_point
- reactjs - React 路由器 - 私有路由
- ms-word - 如何通过使用引用第二个单词文档的字段在单词文档中包含图像,而第二个单词文档又具有引用图像的字段?