首先建立mongodb的初始化bash, 后面会放入docker-compose.yml
mongo-init.sh
mongo -- "$MONGO_INITDB_DATABASE" <<EOF
db = db.getSiblingDB('admin')
db.auth('$MONGO_INITDB_ROOT_USERNAME', '$MONGO_INITDB_ROOT_PASSWORD')
db = db.getSiblingDB('$MONGO_INITDB_DATABASE')
db.createUser({
user: "$MONGO_USERNAME",
pwd: "$MONGO_PASSWORD",
roles: [
{ role: 'readWrite', db: '$MONGO_INITDB_DATABASE' }
]
})
EOF
docker-compose.yml
version: '3'
services:
mongodb-container:
image: mongo:latest
container_name: mongodb-container
command: [--auth]
environment:
# 时区上海
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
MONGO_INITDB_DATABASE: mydatabase
MONGO_USERNAME: cnode
MONGO_PASSWORD: cnode
restart: always
volumes:
- /data2/wuyongyu/mongo_data:/data/db
- ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh
ports:
- 27017:27017
# network_mode: host
# networks:
# kafka_net:
# ipv4_address: 172.27.10.2
使用golang 连接mongodb测试
package main
import (
"context"
"fmt"
"log"
"github.com/sirupsen/logrus"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
uri := "mongodb://127.0.0.1"
var cred options.Credential
cred.AuthSource = "admin"
cred.Username = "root"
cred.Password = "root"
mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAuth(cred))
if err != nil {
panic(err)
}
logrus.Info("创建client成功")
err = mongoClient.Ping(context.TODO(), nil)
if err != nil {
panic(err)
}
logrus.Info("ping 成功")
db := mongoClient.Database("zeroim")
// // 创建一个新的 table
// command := bson.D{{"create", "single_chat_msgTest"}}
// var result bson.M
// if err := db.RunCommand(context.TODO(), command).Decode(&result); err != nil {
// log.Fatal(err)
// }
// use a filter to only select capped collections
// 列出所有的collection
result2, err2 := db.ListCollectionNames(
context.TODO(),
// bson.D{{"options.capped", true}}
bson.D{{}},
)
if err2 != nil {
log.Fatal(err2)
}
for _, coll := range result2 {
fmt.Println(coll)
}
}