首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当提供入口点时,Docker MongoDB映像不会在initdb.d中运行脚本

当提供入口点时,Docker MongoDB映像不会在initdb.d中运行脚本
EN

Stack Overflow用户
提问于 2022-05-19 13:06:00
回答 1查看 652关注 0票数 0

我想在事务中使用Mongo,所以我尝试设置一个副本集(只包含一个Mongo节点)。

我想在数据库启动后自动运行rs.initiate()。为此,我在initdb.d中使用了一个脚本。

我还需要使用replSet选项启动mongo节点,因此我更新了入口点值。当入口点是我的新命令时,我在docker-entrypoint-initdb.d中的脚本不会运行。当我注释掉我的新入口点时,脚本就会运行。

我知道我可以将我的docker-compose up命令和docker-exec ... 'rs.initiate()'命令封装在一个脚本中,然后调用它而不是docker-compose,但这感觉就像黑客一样。

如何使用replSet生成Mongo节点并运行rs.initiate()

docker-compose.yaml

代码语言:javascript
复制
version: "3"
services:
  order-db:
    image: mongo:latest
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: mongo
    # entrypoint: ["mongod", "--bind_ip_all", "--replSet", "order"]
    volumes:
      - ./docker-entrypoint-initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
      - ./docker-entrypoint-initdb.d/run.sh:/docker-entrypoint-initdb.d/run.sh:ro
      - ./docker-entrypoint-initdb.d/arun.sh:/docker-entrypoint-initdb.d/arun.sh:ro

docker-entrypoint-initdb.d/mongo-init.js

代码语言:javascript
复制
rs.initiate();
db.createCollection("just-testing-to-see-if-this-file-runs");

docker-entrypoint-initdb.d/a-run.sh

代码语言:javascript
复制
echo "running aaaaaaaaaaaaaaaaaaaaaaaaaaa"

docker-entrypoint-initdb.d/run.sh

代码语言:javascript
复制
echo "running!!!!!!!!"
EN

回答 1

Stack Overflow用户

发布于 2022-05-19 21:42:17

解决方案

删除entrypoint并将command设置为["--bind_ip_all", "--replSet", "order"]

问题

您正在覆盖mongo图像的入口点。我不知道您是如何期望这些启动脚本运行的,但这是入口点文件的一部分,它是mongo映像的一部分。通过定义自己的入口点,可以防止容器执行现有的入口点,这就是为什么这些初始化脚本不运行的原因。相反,您可以将附加的mongod参数定义为command的一部分,然后将其传递到入口点。然后入口点会把它们传递给单神呼叫。您可以看到这里这里入口点如何处理附加参数并将它们传递给mongod

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72305116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档