【发布时间】:2017-12-21 08:52:39
【问题描述】:
我正在构建一个 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] 在 /data/db 中检测到由“wiredTiger”存储引擎创建的数据文件,因此将活动存储引擎设置为“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= (fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2017-12-21T16:32:02.031+0000 E STORAGE [initandlisten] WiredTiger 错误 (2) [1513873922:31861][1:0x7f88beb53980],连接:/data/db/journal/WiredTigerPreplog.0000000001:file-删除:取消链接:没有这样的文件或目录
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 I STORAGE [initandlisten] initAndListen 中的异常:Location28595:2:没有这样的文件或目录,正在终止
2017-12-21T16:32:02.033+0000 I NETWORK [initandlisten] 关闭:要关闭监听套接字...
2017-12-21T16:32:02.033+0000 I NETWORK [initandlisten] 关闭:要刷新诊断日志...
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 中执行命令和在容器中执行命令有什么区别呢?
【问题讨论】: