我有恢复数据库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
但是如何在同一个命令中执行我的脚本?
答案 0 :(得分:1)
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
您可以传入您想要执行的命令。在您的情况下,这可能是还原脚本。不过,你必须考虑两件事。
CMD
指令。如果您查看Dockerfile,您会将其视为最后一行:
CMD [ "mongod" ]
这意味着容器执行的默认命令是mongod
。当您为docker run
指定命令时,可以使用您传入的命令“替换”它。在您的情况下:传入还原脚本将覆盖mongod
,这意味着Mongo永远不会启动,脚本将失败。
您有两种选择:
由于您希望在短期容器中运行它,因此选项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"
希望这就是解决问题所需的一切。