如何使用docker-compose播种mongo数据库?
我正在尝试分发在几个链接的容器中运行的一组连接的应用程序,这些容器包括一个mongo数据库,该数据库需要:
- 分发包含一些种子数据;
- 允许用户添加其他数据。
理想情况下,数据还将保存在链接的数据卷容器中。
我可以mongo
使用mongo
不装载任何卷的基本实例(dockerhub映像:psychemedia/mongo_nomount
-本质上是不带该VOLUME
/data/db
语句的基本mongo Dockerfile )和Dockerfile
配置的方式将数据放入容器中:
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
其中与Dockerfile ./testdata.csv
位于同一目录(./mongo-with-data
)中。
我的docker-compose配置文件包括以下内容:
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# - ./db/mongo/:/data/db
#volumes_from:
# - devmongodata
#devmongodata:
# command: echo created
# image: busybox
# volumes:
# - /data/db
每当我尝试装入VOLUME时,似乎就好像/data/db
删除了原始种子数据(存储在其中)一样。我猜想,在将卷安装到/data/db
该卷时,它将替换当前存在的任何卷。
也就是说,docker用户指南建议:
创建容器时将初始化卷。
如果容器的基本映像在指定的安装点包含数据,则在卷初始化时将现有数据复制到新卷中?因此,如果我将VOLUME命令放在种子RUN
命令之后,我希望数据能够持久保存吗?
那我在做什么错?
从长远来看,我想自动化几个链接容器的构建,然后分发一个Vagrantfile
/ docker-
compose的YAML文件,该文件将启动一组链接应用程序,其中包括一个预先mongo
填充的数据库,该数据库带有(部分预先填充的)持久数据容器。
-
我使用另一个docker容器执行此操作,该容器的唯一目的是播种mongo,然后退出。我怀疑这与ebaxt的想法相同,但是当我寻找答案时,我只是想看看一个简单而又简单的示例。所以这是我的:
docker-compose.yml
mongodb: image: mongo ports: - "27017:27017" mongo-seed: build: ./mongo-seed links: - mongodb # my webserver which uses mongo (not shown in example) webserver: build: ./webserver ports: - "80:80" links: - mongodb
mongo-seed / Dockerfile
FROM mongo COPY init.json /init.json CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray
mongo-seed / init.json
[ { "name": "Joe Smith", "email": "jsmith@gmail.com", "age": 40, "admin": false }, { "name": "Jen Ford", "email": "jford@gmail.com", "age": 45, "admin": true } ]
-
使用Docker-Compose时如何执行Django数据库迁移?
2021-02-01 关注 0 浏览143 1答案
-
使用Docker-Compose时如何执行Django数据库迁移?
2021-02-02 关注 0 浏览132 1答案
-
使用docker-compose在Postgresql数据库中创建表
2021-02-01 关注 0 浏览127 1答案
-
docker-compose具有多个数据库
2021-02-01 关注 0 浏览135 1答案
-
无法使用docker-compose运行具有副本集的mongo容器
2021-02-01 关注 0 浏览118 1答案
-
如何使用 docker-compose 标记 docker 镜像
2022-07-28 关注 0 浏览20 1答案
-
如何使用docker-compose标记docker映像
2021-02-01 关注 0 浏览134 1答案
-
docker-compose rails rake db:reset失败,“无法删除当前打开的数据库”
2021-02-01 关注 0 浏览88 1答案
-
如何获取docker-compose以使用存储库中的最新映像
2021-02-01 关注 0 浏览100 1答案
-
如何使用docker-compose将docker容器彼此链接
2021-02-01 关注 0 浏览142 1答案