Docker-等待Mongo加载,然后运行创建索引脚本

时间:2019-11-11 07:02:06

标签: mongodb docker

我有一个在MongoDB中创建文本索引的脚本-但是,如果我将其与当前的Dockerfile一起使用(反过来在我的docker-compose文件中调用它),则会导致错误,因为Mongo尚未完全加载

我见过dependsOn,但这似乎是针对整个服务的。还遇到了这个https://github.com/ufoscout/docker-compose-wait/,但是如果有更简单的方法,我想避免使用它。

有人解决了这个问题-等待RUN之前加载Mongo吗?

我的dockerfile

FROM mongo:4
COPY ./scripts /scripts
RUN mongo<scripts/create-text-indexes

和docker-compose代码段

dashboard-mongo:
    build:
      context: ./infrastructure
      dockerfile: Dockerfile
    image: a-custom-mongo:SNAPSHOT
    ports:
      - "27017:27017"
    networks:
      default:
      cms:
        aliases:
          - dashboard-mongo

我正在运行的脚本如下:

use customboard

print("---> Deleting existing indexes...");
db.test.dropIndexes();

print("---> Creating indexes...");
db.test.createIndex({
    "_id": "text",
    "code": "text"
});

谢谢。

1 个答案:

答案 0 :(得分:2)

RUN mongo<scripts/create-text-indexes此脚本将不起作用,请记住RUN命令用于安装和配置,以免与数据库交互或启动该过程。您应该在CMD或入口点开始该过程。

使用offical imageclone the offical回购并从正式docker映像入口点中受益的一种方法。为什么要重新发明轮子?

为您提供所需的官方图像

FROM mongo:4
COPY ./scripts /docker-entrypoint-initdb.d

一旦构建并启动了容器,官方映像将启动DB进程,并等待它能够处理连接,然后它将运行脚本。

初始化一个新实例

  

首次启动容器时,它将执行文件   带有.sh和.js扩展名   /docker-entrypoint-initdb.d。文件将按字母顺序执行   订购。 .js文件将由mongo使用数据库执行   由MONGO_INITDB_DATABASE变量指定(如果存在),或者   否则测试。您也可以在.js脚本中切换数据库。

docker mongo image

相关问题