docker 如何将示例数据导入mongoDB容器?

vecaoik1  于 2023-08-03  发布在  Docker
关注(0)|答案(1)|浏览(107)

我想在初始化时将示例数据添加到mongoDB容器中。但是当我进入mongdb shell时,我无法找到我的集合/表。我设置错什么了吗?如何正确预加载示例数据?
谢谢你的帮助

test> show dbs
admin    8.00 KiB
config  12.00 KiB
local    8.00 KiB

字符串
下面是我的docker-compose文件的一部分。

mongo:
    image: mongo:7.0-rc
    volumes:
      - ./test/fixtures/mongo:/docker-entrypoint-initdb.d
    command: bash -c "mongod --bind_ip=127.0.0.1 --port=27017 && mongoimport --host mongodb --db sampleDB --collection reviews --file /docker-entrypoint-initdb.d/sample.json --jsonArray"


sample.json文件

[
{"id":"a1" , "country":"US"},
{"id":"b2" , "country":"JP"},
]

tv6aics1

tv6aics11#

为了回应@wernfried-domscheit在评论中所说的,当您运行mongod时,它不会“完成”,直到数据库关闭,因此&&之后的命令不会运行(直到为时已晚)。
我建议的另一种方法是创建一个脚本,在后台启动DB,等待它准备好,运行导入,然后将DB进程带回前台。我想它看起来会像这样:

#!/bin/bash

# Start the mongo process as a background process
mongod --bind_ip=127.0.0.1 --port=27017 &

# Wait for mongo DB to be ready (see https://stackoverflow.com/a/45060399/1830312)
until mongo --eval "print(\"waited for connection\")"
  do
    sleep 5
  done

# Run the import
mongoimport --host mongodb --db sampleDB --collection reviews --file /docker-entrypoint-initdb.d/sample.json --jsonArray

# Wait for all background processes to finish
wait

字符串

相关问题