我已經使用官方 docker 容器創建了一個 mongo 服務器。
如果我檢查容器,我會發現以下預期的環境:
"StdinOnce": false,
"Env": [
"MONGO_INITDB_ROOT_USERNAME=root",
"MONGO_INITDB_ROOT_PASSWORD=xxxxx",
"MONGO_INITDB_DATABASE=unpubd",
"affinity:container==5b49b08d73960bfefe10eae7df25328f2296d9eb2c648af330e3ef75f928a289",
,
"GOSU_VERSION=1.12",
"JSYAML_VERSION=3.13.1",
"MONGO_PACKAGE=mongodb-org",
"MONGO_REPO=repo.mongodb.org",
"MONGO_MAJOR=5.0",
"MONGO_VERSION=5.0.4"
],
我的理解是,這應該創建一個名為 unpubd 的資料庫和一個具有指定密碼的 root 用戶。
問題是我無法對容器進行身份驗證。我嘗試了三個不同的網址,結果都一樣。:
mongodb://root:XXXX@localhost:27017/
mongodb://root:XXXX@localhost:27017/unpub
mongodb://root:XXXX@localhost:27017/admin
mongodb://root:XXXX@localhost:27017/unpubd?authSource=admin
MongoDart Error: Authentication failed.
我也試過 mongo 命令外殼:
use admin
var x = new Mongo('localhost');
var mydb = x.getDB('unpubd');
mydb.auth('root', 'XXXX')
Error: Authentication failed.
我不清楚 auth db 與我的 unpubd db。我是否使用管理資料庫進行身份驗證?我假設 root 用戶將能夠 rw 取消發布資料庫?
這是我的 docker-compose 檔案
version: '3.1'
networks:
unpubd:
driver: bridge
volumes:
mongodata: null
services:
mongodb:
container_name: mongo
image: mongo:latest
restart: on-failure
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
volumes:
- mongodata:/data/db
networks:
- unpubd
ports:
- 27017:27017
logging:
driver: "local"
unpubd:
container_name: unpubd
image: noojee/unpubd:latest
restart: on-failure
depends_on:
- mongodb
environment:
MONGO_ROOT_USERNAME: ${MONGO_ROOT_USERNAME}
MONGO_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}
MONGO_DATABASE: ${MONGO_DATABASE}
MONGO_HOST: ${MONGO_HOST}
MONGO_PORT: ${MONGO_PORT}
UNPUBD_PORT: ${UNPUBD_PORT}
TZ: ${TZ}
links:
- mongodb
networks:
- unpubd
ports:
- ${UNPUBD_PORT}:${UNPUBD_PORT}
logging:
driver: "local"
示例 .env 檔案
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=abc1234
MONGO_INITDB_DATABASE=unpubd
MONGO_DATABASE=unpubd
MONGO_ROOT_USERNAME=root
MONGO_ROOT_PASSWORD=abc1234
MONGO_DATABASE=unpubd
MONGO_HOST=mongodb
MONGO_PORT=27017
TZ=AUS Eastern Daylight Time
UNPUBD_HOST=0.0.0.0
UNPUBD_PORT=4000
uj5u.com熱心網友回復:
我花了一秒鐘才弄清楚這一點。
從日志中我可以看到,當 mongodb 啟動時,它會執行以下操作:
mongo | Successfully added user: {
mongo | "user" : "root",
mongo | "roles" : [
mongo | {
mongo | "role" : "root",
mongo | "db" : "admin"
mongo | }
mongo | ]
mongo | }
如您所見,它在 admin db 中創建用戶,而不是您在MONGO_INITDB_DATABASE.
查看 docker hub 上 mongo 鏡像的檔案:
MONGO_INITDB_ROOT_USERNAME,MONGO_INITDB_ROOT_PASSWORD:這些變數結合使用,創建一個新用戶并設定該用戶的密碼。該用戶是在 admin 身份驗證資料庫中創建的,并被賦予 root 角色,這是一個“超級用戶”角色。
和
MONGO_INITDB_DATABASE:此變數允許您在 /docker-entrypoint-initdb.d/*.js 中指定用于創建腳本的資料庫名稱
要使其作業,您需要做的是創建一個腳本,將您的用戶添加到您在 init env 變數中使用的資料庫中,例如:
db.createUser(
{
user: "root",
pwd: "abc1234",
roles: [ "readWrite", "dbAdmin" ]
}
)
并將其系結到 /docker-entrypoint-initdb.d/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/372864.html
下一篇:多個firebase用戶登錄
