我正在尝试分发一组连接的应用程序,这些应用程序运行在几个链接的容器中,其中包括一个 mongo 数据库,该数据库需要:
理想情况下,数据还将保存在链接的数据卷容器中。
我可以使用一个不挂载任何卷的 mongo
基本实例(dockerhub image: psychemedia/mongo_nomount
-这实际上是没有 VOLUME /data/db
语句的基本 mongo Dockerfile)和一个 Dockerfile
配置将数据放到 mongo
容器中,如下所示:
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
其中 ./testdata.csv
与 Dockerfile 位于同一目录(./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
每当我尝试挂载一个卷时,似乎原始的种子数据(存储在 /data/db
中)被删除了。我猜想,当一个卷安装到 /data/db
时,它将替换当前存在的任何内容。
也就是说,Docker 用户指南表明: 在创建容器时初始化卷。如果容器的基本映像包含指定挂载点的数据,则在卷初始化时将现有数据复制到新卷中?因此,如果我在播种 RUN
命令之后放置 VOLUME 命令,那么我希望数据保持不变?
那我做错了什么?
从长远来看,我想自动构建几个链接容器,然后分发一个 Vagrantfile
/docker 组合 YAML 文件,它将启动一组链接应用程序,其中包括一个预先种子的 mongo
数据库和一个(部分预先填充的)持久数据容器。