如何使用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数据库,该数据库带有(部分预填充)持久数据容器。

杰夫·费尔利(Jeff Fairley):

我使用另一个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": "[email protected]",
    "age": 40,
    "admin": false
  },
  {
    "name": "Jen Ford",
    "email": "[email protected]",
    "age": 45,
    "admin": true
  }
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在链接的Docker容器内的Mongo数据库中播种数据

TypeORM如何播种数据库

如何完全销毁docker-compose创建的Mongo数据库?

Mongodb数据未使用Docker Compose播种

使用属于用户的任务为数据库播种

使用DoctrineFixturesBundle播种生产数据库是否安全?

在Laravel中使用随机状态播种数据库

数据库播种 这是我们使用的原因

无法使用EF Core播种数据库

数据库没有在 Laravel 中使用适当的工厂和播种器类播种

Docker Compose-如何存储数据库数据?

无法使用 docker 创建 mongo 数据库

Mongo数据库在使用docker时断开连接

使用 docker compose 将 API 连接到数据库

如何使用 has_and_belongs_to_many 为数据库播种

Rails:如何在播种数据库时使用each_with_index查询记录

如何使用Rails测试装置为我的开发数据库播种

如何使用数据库用户和密码启动mongo docker映像

使用Docker-Compose时如何执行Django数据库迁移?

使用docker-compose时如何创建和填充wso2数据库表?

在使用docker-compose启动webapp之前如何填充Elasticsearch数据库?

Python 应用程序如何使用 Docker-compose 查找 Postgres 数据库

如何insertOne到mongo数据库

如何使用docker-compose.yml为在docker中运行的应用指定docker容器数据库?

使用EntityFramework Core 2.2播种具有数据库生成键的数据

如何使用 Docker 和 Docker Compose 从备份开始自动创建和运行“干净”的 SQL Server 数据库?

如何在Eclipse中使用Mongo数据库URI

如何使用Python动态创建mongo数据库的名称?

如何使用mongo / mongoose连接到远程数据库