簡體   English   中英

docker-compose 使用用戶名和密碼創建 mongo 容器

[英]docker-compose create mongo container with username and password

我在 Compose 中創建了一個 mongo 容器:

version: '2'
volumes:
  mongodata:
    driver: local
services:
  mongo:
    image: mongo:latest
    hostname: ${MONGODB_HOST}
    restart: always
    ports: 
      - "27017:27017"
    volumes:
      - mongodata:/data/db

這非常有效,但是現在我想在數據庫上輸入密碼。 為此,據我所知,首先我需要創建數據庫,添加密碼,然后使用--auth標志重新啟動它。 我的問題是如何使用 docker-compose 執行此過程。

如果我在沒有 docker-compose 的情況下做所有事情,我可以做到這一點。我可以看到 compose 引起的問題是:

a) docker-compose 在 docker.network 中工作。 b) docker-compose 不能在生產開始時運行不同的命令。 - 這很重要,因為雖然有些人說您可以在開始時運行--auth並且它將允許您在第一次設置密碼,但事實並非如此。

我開始研究的一個解決方案是一個 shell 腳本,我會在運行 docker-compose 文件之前在我的所有服務器上運行:

# start the temporary container
docker run -d -v /tmp/mongodb --name tmpdb -e MONGODB_DBNAME=db_test mongo --auth
# do the user creation
docker run -it --link tmpdb --rm mongo sh -c 'mongo --host tmpdb --eval "db.createUser({ user: \"admin\", pwd: \"password\", roles: [ { role: \"root\", db: \"admin\" } ] });"'
# stop the server
docker stop tmpdb
# create new mongodb container, using the old ones data
docker run -d -p 27017:27017 --name mongo2 -e MONGODB_DBNAME=db_test mongo --auth
# clean up old container (we are using the volumes so they will stick around)
docker rm tmpdb

該文件創建一個臨時容器,在其上設置用戶名/密碼,停止原始容器,使用舊卷容器創建新容器,並刪除原始容器。 新的 mongo 容器現在有一個密碼。

所以我最后的問題是,在 docker-compose 中最好的方法是什么?

我的 docker-compose 文件中的其他容器需要能夠訪問 mongo,所以我認為保存 mongo 數據的卷容器需要位於 docker-compose 創建的同一個網絡中

mongo:編寫時的最新圖像(v 3.5)接受兩個環境變量MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD

設置這些后,容器的入口點腳本將使用--auth啟動mongod服務,然后使用提供的憑據創建管理員用戶。

目前沒有在README文件中記錄這一點,但是有一個GitHub問題跟蹤進展,並且源代碼可以在docker-entrypoint.sh腳本的第104獲得

要在docker-compose.yml使用這些變量,請參閱以下代碼段:

version: '3'
services:
  mongodb:
    image: mongo:3.5
    hostname: ${MONGODB_HOST}
    environment:
      - MONGO_INITDB_ROOT_USERNAME=alice
      - MONGO_INITDB_ROOT_PASSWORD=super-secret-password
    restart: on-failure
    ports:
      - 27017:27017
    volumes:
      - ./mongodb:/data/db

有人對此有答案嗎? 我已經創建了 docker-compose.yml,如下所示,雖然它仍然出現錯誤,但身份驗證失敗:在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM