繁体   English   中英

Docker MongoDB 当提供入口点时,图像不会在 docker-entrypoint-initdb.d 中运行脚本

[英]Docker MongoDB image doesn't run scripts in docker-entrypoint-initdb.d when entrypoint is supplied

我想将 Mongo 与事务一起使用,因此我尝试使用 docker 设置一个副本集(仅包含一个 Mongo 节点)。

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

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

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

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

docker-compose.yaml :

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

rs.initiate();
db.createCollection("just-testing-to-see-if-this-file-runs");

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

echo "running aaaaaaaaaaaaaaaaaaaaaaaaaaa"

docker-entrypoint-initdb.d/run.sh

echo "running!!!!!!!!"

解决方案

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

问题

您正在覆盖mongo图像的入口点。 我不确定您期望这些启动脚本如何运行,但它是嵌入到 mongo 图像中的入口点文件的一部分。 通过定义您自己的入口点,您可以防止容器执行现有入口点,这就是不运行这些初始化脚本的原因。 相反,您可以将额外的mongod arguments 定义为command的一部分,然后将其传递到入口点。 然后入口点会将它们传递给 mongod 调用。 您可以在此处此处看到入口点如何处理额外的 arguments 并将它们传递给mongod

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM