从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:

  1. 使用数据库启动一个容器,使用还原脚本启动另一个容器。
  2. 尝试链接命令。

既然你想在一个短暂的容器中运行这个,选项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" 

希望这是解决您的问题所需的一切。