从mongodb docker-container运行脚本

时间:2017-06-29 09:18:32

标签: mongodb docker

我有恢复数据库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 

但是如何在同一个命令中执行我的脚本?

1 个答案:

答案 0 :(得分:1)

查看docker run reference

 $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

您可以传入您想要执行的命令。在您的情况下,这可能是还原脚本。不过,你必须考虑两件事。

  • 该脚本不是容器的一部分,因此您需要安装到容器中。
  • 指定命令会覆盖Dockerfile中的CMD指令。

如果您查看Dockerfile,您会将其视为最后一行:

CMD [ "mongod" ]

这意味着容器执行的默认命令是mongod。当您为docker run指定命令时,可以使用您传入的命令“替换”它。在您的情况下:传入还原脚本将覆盖mongod,这意味着Mongo永远不会启动,脚本将失败。

您有两种选择:

  1. 使用数据库启动一个容器,使用还原脚本启动另一个容器。
  2. 尝试将命令链接起来。
  3. 由于您希望在短期容器中运行它,因此选项2可能更适合您。只需记住使用mongod标志启动--fork以在守护程序模式下运行它。

    $ 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"
    

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