docker-compose 安装mongoDB 6.0.6
环境
- 系统环境:ubuntu22.04
- docker版本: 23.0.1
- docker-compose版本:v2.17.0
docker-compose.yml
version: '3.6'
# Deploys MongoDB with customization scripts and container with Mongo client
# https://fabianlee.org/2018/05/20/docker-using-docker-compose-to-link-a-mongodb-server-and-client/
#
# usage:
# sudo docker-compose build
# sudo docker-compose up
services:
my-mongodb:
image: mongo:6.0.6-jammy
container_name: my-mongodb
restart: always
ports:
- 27017:27017
environment:
- MONGO_INITDB_DATABASE=test
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin123456
volumes:
# seeding scripts
- ./mongo-entrypoint:/docker-entrypoint-initdb.d
# named volumes
- ./db:/data/db
#- mongoconfig:/data/configdb
networks:
- mongo_net
my-mongoclient:
# build will get tagged with 'image'
build: ./my-mongoclient
image: fabianlee/my-mongoclient:3.9
container_name: my-mongoclient
restart: always
environment:
- MONGO_SERVER=my-mongodb
- MONGO_INITDB_DATABASE=test
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin123456
networks:
- mongo_net
depends_on:
- my-mongodb
#volumes:
# default dir on Ubuntu: /var/lib/docker/volumes
# mongodb2: /usr/local/docker/mongodb/db
# mongoconfig:
networks:
mongo_net:
driver: bridge
运行
docker-compose up -d
springBoot连接使用
不能直接使用docker-compose.yml配置的MONGO_INITDB_ROOT_USERNAME连接
mongoDB中不能直接使用ROOT_USERNAME里配置的用户来读取数据库,需要为使用的库创建连接用户,如果使用MONGO_INITDB_ROOT_USERNAME 连接,会报如下错误:
Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server 192.168.20.151:27017. The full response is {"ok": 0.0, "errmsg": "Authentication failed.", "code": 18, "codeName": "AuthenticationFailed"}
at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:198)
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:413)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:337)
at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:101)
at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:45)
at com.mongodb.internal.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:230)
at com.mongodb.internal.connection.SaslAuthenticator.getNextSaslResponse(SaslAuthenticator.java:137)
... 108 more
为数据库创建连接用户
- 进入容器
docker exec -it my-mongodb bash
- 切换用户
mongosh -u admin
- 指定使用test数据库
use test
- 为test库创建用户,以及用户角色,配置文件里就可以使用新创的这个用户连接mongoDB
db.createUser({user: "testUser", pwd: "testUser123456", roles : [{role: "readWrite", db: "test"}]});
springBoot的mongoDB连接配置
# 配置mongodb地址
spring:
data:
mongodb:
username: testUaser
password: testUser123456
database: test
host: 192.168.20.151
port: 27017