【发布时间】:2019-05-19 02:46:51
【问题描述】:
我必须创建一个带有一些默认集合和数据的 mongo 图像。我可以通过参考以下链接使用此数据创建 mongo 图像:-
How to create a Mongo Docker Image with default collections and data?
所以当我运行容器时,我会得到默认数据。 现在,当我使用该应用程序并生成更多数据(通过调用 API)时,这些数据会使用默认数据再次保存在 mongodb 中。
现在由于某种原因,如果重新启动 docker 容器,不幸的是,所有运行时创建的数据都消失了,只剩下默认数据。虽然我正在使用卷保存数据。
那么每次docker重启时如何持久化运行时数据和默认数据呢? 我正在使用以下 docker 文件和 docker-compose 文件
Docker 文件:
FROM mongo
####### working isnerting data $##########
# Modify child mongo to use /data/db2 as dbpath (because /data/db wont persist the build)
RUN mkdir -p /data/db2 \
&& echo "dbpath = /data/db2" > /etc/mongodb.conf \
&& chown -R mongodb:mongodb /data/db2
COPY . /data/db2
RUN mongod --fork --logpath /var/log/mongodb.log --dbpath /data/db2 --smallfiles \
&& mongo 127.0.0.1:27017/usaa /data/db2/config-mongo.js \
&& mongod --dbpath /data/db2 --shutdown \
&& chown -R mongodb /data/db2
# Make the new dir a VOLUME to persists it
VOLUME /data/db2
CMD ["mongod", "--config", "/etc/mongodb.conf", "--smallfiles"]
和 docker-compose.yml 的一部分
services:
mongo:
build: ./mongodb
image: "mongo:1.2"
container_name: "mongo"
ports:
- "27017:27017"
volumes:
- ${LOCAL_DIRECTORY}:/data/db2
networks:
- some-network
原因可能是,通过重建 docker 映像,它创建的 /data/db2 目录仅包含 .js 文件中定义的默认数据。但不确定。
请纠正我做错的地方或为这个问题建议一个新的工作流程。
非常感谢!
【问题讨论】:
标签: mongodb docker docker-compose dockerfile docker-volume