我正在构建一个mongodb图像。由于某种原因,需要将数据目录放在图像中,并且需要提供配置文件,以便可以将图像文件加载到另一个服务器中并直接运行。所以我在这里下载Dockerfile / docker-entrypoint.sh:
https://github.com/docker-library/mongo/tree/58bdba62b65b1d1e1ea5cbde54c1682f120e0676/3.6
并对Dockerfile进行一些更改:
\# VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
COPY mongo.cnf /mongo.cnf
USER mongodb
COPY Theme.json /tmp/Theme1.json
RUN (nohup mongod -f /mongo.cnf > /dev/null 2>&1 & ) \
&& mongoimport -d SIA -c Theme --file /tmp/Theme1.json \
&& mongod --shutdown
EXPOSE 27017
\# CMD ["mongod"]
CMD ["mongod", "-f", "/mongo.cnf"]
构建成功,但容器无法启动:
2017-12-21T16:32:02.024 + 0000 I - [initandlisten]检测到'wiredTiger'存储引擎创建的/ data / db中的数据文件,因此将活动存储引擎设置为'wiredTiger'。
2017-12-21T16:32:02.024 + 0000 I STORAGE [initandlisten] wiredtiger_open config:create,cache_size = 7512M,session_max = 20000,eviction =(threads_min = 4,threads_max = 4),config_base = false,statistics = (快),日志=(启用=真,归档=真,路径=轴颈,压缩机=活泼的),file_manager =(close_idle_time = 100000),statistics_log =(等待= 0),冗长=(recovery_progress),
2017-12-21T16:32:02.031 + 0000 E STORAGE [initandlisten] WiredTiger错误(2)[1513873922:31861] [1:0x7f88beb53980],连接:/data/db/journal/WiredTigerPreplog.0000000001:file- remove:unlink:没有这样的文件或目录
2017-12-21T16:32:02.033 + 0000 E - [initandlisten]断言:28595:2:没有这样的文件或目录src / mongo / db / storage / wiredtiger / wiredtiger_kv_engine.cpp 409
2017-12-21T16:32:02.033 + 0000我在initAndListen中存储[initandlisten]异常:Location28595:2:没有这样的文件或目录,终止
2017-12-21T16:32:02.033 + 0000 I NETWORK [initandlisten] shutdown:关闭监听套接字......
2017-12-21T16:32:02.033 + 0000 I NETWORK [initandlisten] shutdown:要刷新diaglog ......
2017-12-21T16:32:02.033 + 0000 I CONTROL [initandlisten]现已退出
2017-12-21T16:32:02.033 + 0000 I CONTROL [initandlisten]关闭代码:100
如果我使用原始的Dockerfile来构建图像,以交互模式运行它,并执行mongod / mongoimport,那很好。那么从Dockerfile RUN执行命令和在容器中执行它们之间的区别是什么?
答案 0 :(得分:0)
WiredTiger错误(2),连接:/data/db/journal/WiredTigerPreplog.0000000001:file-remove:unlink:没有这样的文件或目录
某些日志文件似乎缺失了。确保将它们复制过来。
如果您想尝试在没有日记的情况下运行MongoDB,请使用:--nojournal
。
请参阅:What is the difference between journal and non journal Mongodb database
如果您认为所有文件都存在,请尝试通过以下方式修复您的数据库:
mongod --repair --dbpath /path/to/data/db