Dockerfile 中的 Mongorestore [英] Mongorestore in a Dockerfile

查看:19
本文介绍了Dockerfile 中的 Mongorestore的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个启动 mongo 服务器并在启动时自动从以前的 mongodump 恢复的 Docker 映像.

I want to create a Docker image that starts a mongo server and automatically restores from a previous mongodump on startup.

这是我的镜像文件:

 FROM mongo

 COPY dump /home/dump

 CMD mongorestore /home/dump

当我运行这个时,我遇到了这个错误:

When I run this, I run into this error:

失败:连接数据库服务器时出错:没有可访问的服务器

<小时>

有没有办法让 mongorestore 命令通过 Docker 运行?


Is there any way to get the mongorestore command to run through Docker?

推荐答案

this answer 的帮助下,Marc Young 的回答,以及 Dockerfile 参考我能够得到这个工作.

With help from this answer, Marc Young's answer, and the Dockerfile reference I was able to get this working.

Dockerfile

FROM mongo

COPY dump /home/dump
COPY mongo.sh /home/mongo.sh
RUN chmod 777 /home/mongo.sh

CMD /home/mongo.sh

mongo.sh

#!/bin/bash

# Initialize a mongo data folder and logfile
mkdir -p /data/db
touch /var/log/mongodb.log
chmod 777 /var/log/mongodb.log

# Start mongodb with logging
# --logpath    Without this mongod will output all log information to the standard output.
# --logappend  Ensure mongod appends new entries to the end of the logfile. We create it first so that the below tail always finds something
/entrypoint.sh mongod --logpath /var/log/mongodb.log --logappend &

# Wait until mongo logs that it's ready (or timeout after 60s)
COUNTER=0
grep -q 'waiting for connections on port' /var/log/mongodb.log
while [[ $? -ne 0 && $COUNTER -lt 60 ]] ; do
    sleep 2
    let COUNTER+=2
    echo "Waiting for mongo to initialize... ($COUNTER seconds so far)"
    grep -q 'waiting for connections on port' /var/log/mongodb.log
done

# Restore from dump
mongorestore --drop /home/dump

# Keep container running
tail -f /dev/null

这篇关于Dockerfile 中的 Mongorestore的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆