Mongodb Dockerfile 自动播种数据

问题描述 投票:0回答:1

我想为 MongoDB 创建一个 Dockerfile,它将启动 mongod 并使用 .json 文件为数据库播种(如果已安装)。

这是目前的样子:

FROM mongo:7.0.6

COPY ./tools/db /import

RUN echo -e "mongod; for f in /import/*.json; do name=\$(basename \$f | cut -d'.' -f1); mongoimport --db=APPDB --collection=\$name --jsonArray --file=\$f; done;" > /usr/local/bin/run.sh
RUN chmod 777 /usr/local/bin/run.sh

CMD ["/usr/local/bin/run.sh"]

当我运行这个容器时,mongod 命令之后的所有内容都不会运行。但是,如果我登录到容器,我可以运行 shell 脚本并且导入工作正常。我想我明白为什么这不起作用,因为“mongod”接管终端并且不交回控制权,因此数据播种不执行。我尝试向 mongod 添加“--fork”标志,但似乎 mongod 甚至不是以此开始的。

有办法让它发挥作用吗?

mongodb docker
1个回答
0
投票

Mongo DB 通常通过图像入口点启动。图像上有一个特定的文件夹

/docker-entrypoint-initdb.d/
,用于存放启动脚本。我建议如下:

  1. 在与您的
    run.sh
    相同的文件夹中创建文件
    Dockerfile
#!/bin/bash

for f in /import/*.json
do
    name=$(basename $f | cut -d'.' -f1)
    mongoimport --db=APPDB --collection=$name --jsonArray --file=$f
done
  1. run.sh
    复制到
    /docker-entrypoint-initdb.d/
FROM mongo:7.0.6

COPY ./tools/db /import
COPY run.sh /docker-entrypoint-initdb.d/

如果您现在构建并运行图像,您应该会发现 JSON 种子文件在数据库启动时导入。

© www.soinside.com 2019 - 2024. All rights reserved.