我有一个在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"
});
谢谢。
答案 0 :(得分:2)
RUN mongo<scripts/create-text-indexes
此脚本将不起作用,请记住RUN
命令用于安装和配置,以免与数据库交互或启动该过程。您应该在CMD或入口点开始该过程。
使用offical image或clone 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脚本中切换数据库。