簡體   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