docker-compose部署mongodb

逄学潞
2023-12-01

首先建立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)
	}
}

 类似资料: