經過兩天的折騰,終於實現了自己想要的效果,就是通過docker-compose 部署最新的mongodb replicaSet, 主要是為了測試 4.2 最新的多文檔事務,下面將整個步驟分享一下:
docker-compose.yml 內容如下:
version: '3.4'
services:
mongo:
container_name: mongodb
image: mongo:latest
hostname: mongodb
volumes:
- /data/mongodb/mongod.conf:/etc/mongod.conf
- /data/mongodb/data/db/:/data/db/
- /data/mongodb/data/log/:/var/log/mongodb/
- /data/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=123456
ports:
- "27017:27017"
healthcheck:
test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo -u root -p '123456' --quiet) -eq 1
interval: 10s
start_period: 30s
command: ["--replSet", "rs0", "--bind_ip_all"]
說明:
1、 /data/mongodb/mongod.conf 文件需要提前建好,內容如下,主要是啟用驗證,如果不掛載這個文件,replicaset 是在裸奔的
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
2、 /data/mongodb/initdb.d 此目錄下的腳本是用來初始化的,前提是沒有任何數據前執行,我在該目錄下創建了create-app-user.sh 來初始化自定義數據庫【yourdb】以及用戶名【yourAdmin】密碼【123456】,內容如下:
#!/usr/bin/env bash echo "Creating mongo users..." mongo admin -u root -p 123456 << EOF db.createUser({user: 'admin', pwd: '123456', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]}); db.grantRolesToUser( "admin", [ "clusterAdmin" ] ); EOF mongo admin -u admin -p 123456 << EOF use yourdb db.createUser({user: 'yourdbAdmin', pwd: '123456', roles:[{role:'readWrite',db:'yourdb'}]}) EOF echo "Mongo users created for yourdb."
3、可以用monog client 測試登錄:
mongo -u root -p 123456
登錄成功后,是這個樣子滴:

執行 show dbs; 可以看到自己建了的數據庫,測試自己建了的用戶和密碼,可以使用:
mongo -u yourdbAdmin -p 123456 --authenticationDatabase yourdb
