У меня есть приложение SpringBoot, работающее в докере, и я использую PostgreSQL в качестве базы данных для этого проекта, и база данных также работает в докере.
Теперь я хочу использовать MongoDb вместе с PostgreSQL в качестве базы данных для моего приложения SpringBoot.
Я добавил информацию MongoDb в файл docker-compose.yml, создал новый файл Dockerfile и запустил приложение. После этого MongoDb был успешно установлен и запущен в докере.
Я создал API для вставки документа в коллекцию. Когда я нажимаю API, я получаю сообщение об ошибке. Я думаю, что не могу подключиться к MongoDb, который работает в докере.
ошибка: - com.mongodb.MongoSocketOpenException: сокет открытия исключения
Я думаю, что мне нужно выполнить настройку в MongoDb, прежде чем выполнять какие-либо операции CRUD.
Может ли кто-нибудь поделиться подробной конфигурацией MongoDb с некоторыми примерами.
Или предоставьте некоторую информацию, которая может помочь мне выполнить мою задачу.
Спасибо.
Docker-compose.yml
mongodb:
build:
context: mongodb
args:
DOCKER_ARTIFACTORY: ${DOCKER_ARTIFACTORY}
container_name: “mongodb”
image: mongo:6.0.4
restart: always
environment:
- MONGODB_USER=${SPRING_DATASOURCE_USERNAME:-username}
- MONGODB_PASSWORD=${SPRING_DATASOURCE_PASSWORD:-password}
ports:
- “27017:27017”
volumes:
- “/mongodata:/data/mongodb”
networks:
- somenetwork
Докерфайл
ARG DOCKER_ARTIFACTORY
FROM ${DOCKER_ARTIFACTORY}mongo:6.0.4
COPY init/mongodbsetup.sh /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/mongodbsetup.sh
CMD [“mongod”]
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
mongodb:
image: mongo
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
Вы можете найти приведенную выше конфигурацию файла докера, который включает в себя конфигурации как MongoDB, так и PostgreSQL.
Я решаю проблему и успешно могу подключиться и выполнять операции CRUD.
Ниже приведены изменения, которые я сделал.
mongodb:
build:
context: mongodb
args:
DOCKER_ARTIFACTORY: ${DOCKER_ARTIFACTORY}
container_name: mongodb
hostname: mongodb
restart: always
environment:
- MONGO_INITDB_DATABASE=databaseName
- MONGO_INITDB_ROOT_USERNAME=username
- MONGO_INITDB_ROOT_PASSWORD=password
ports:
- 27017:27017
volumes:
- /mongodata:/data/mongodb
networks:
- somenetwork
созданный ниже файл (имя файла: mongodbsetup.sh) в папке projectFolder/builder/mongodb/init
#!/bin/bash
mongosh <<EOF
use code
EOF
созданный ниже файл (имя файла: Dockerfile) в папке projectFolder/builder/mongodb
ARG DOCKER_ARTIFACTORY
FROM ${DOCKER_ARTIFACTORY}mongo:6.0.4
COPY init/mongodbsetup.sh /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/mongodbsetup.sh
CMD ["mongod"]
В файле application.properties добавлены следующие свойства
#MongoDB configurations
spring.data.mongodb.database=databasename
spring.data.mongodb.uri=mongodb://username:password@databaseurlOrIpAddress:27017
Вот и все. Работает.
Я изменяю файл docker-compose.yml, как показано ниже.
mongodb: ... args: DOCKER_ARTIFACTORY: ${DOCKER_ARTIFACTORY} container_name: "mongodb" image: mongo:6.0.4 restart: always environment: - MONGO_INITDB_DATABASE=code - MONGO_INITDB_ROOT_USERNAME=postgres - MONGO_INITDB_ROOT_PASSWORD=password ...
Приложение работает успешно, без ошибок. Когда я нажимаю API вставки документа, я получаю сообщение об ошибке ниже.org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential...
есть решения?