从mongodb docker-container运行脚本
我有恢复数据库restore.sh
脚本:
mongorestore --port 27017 --db myapp `pwd`/db-dump/myapp
我想在一个使用mvertes / alpine-mongo镜像的短暂的docker -container中运行它。
要运行一个短暂的容器,使用--rm
:
docker run --rm --name mongo -p 27017:27017 \ -v /data/db:/data/db \ mvertes/alpine-mongo
但是如何在同一个命令中执行我的脚本呢?
检查docker运行参考 :
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
你可以传入你想执行的命令。 在你的情况下,这可能是恢复脚本。 不过,你必须考虑两件事情。
- 脚本不是容器的一部分,所以你需要装入容器。
- 指定一个命令覆盖Dockerfile中的
CMD
指令。
如果你看看Dockerfile,你会发现它是最后一行:
CMD [ "mongod" ]
这意味着容器执行的默认命令是mongod
。 当你为docker run
指定一个命令时,用你传入的命令“replace”这个命令。在你的情况下:传入恢复脚本将覆盖mongod
,这意味着Mongo永远不会启动,脚本将会失败。
你有两个select:
- 使用数据库启动一个容器,使用还原脚本启动另一个容器。
- 尝试链接命令。
既然你想在一个短暂的容器中运行这个,选项2可能更适合你。 只要记住用--fork
标志启动mongod
以守护进程模式运行它。
$ docker run --rm --name mongo -p 27017:27017 \ -v /data/db:/data/db \ -v "$(pwd)":/mnt/pwd \ mvertes/alpine-mongo "mongod --fork && /mnt/pwd/restore.sh"
希望这是解决您的问题所需的一切。