Как подключиться к указанному c локальному экземпляру MongoDB в приложении Spring Boot Dockerised? - PullRequest
0 голосов
/ 12 марта 2020

Я разработал простое Spring Boot Application , которое выполняет CRUD операций, используя MongoDB в качестве базы данных. Я развернул это приложение в Docker, но я получаю нулевые значения при выполнении GET Request для любых элементов, хранящихся в MongoDB. Ниже приведены некоторые файлы, необходимые для Docker:

Dockerfile:

  VOLUME /tmp
  ADD build/libs/Spring-Boot-MongoDB-0.0.1-SNAPSHOT.jar SpringMongoApp.jar
  ENTRYPOINT ["java", "-Dspring.data.mongodb.uri=mongodb://mongo:27018/otp","-jar","/SpringMongoApp.jar"]

docker -compose.yml:

version: "3"
services:
  api-database:
    image: mongo:3.2.4
    container_name: "springboot-mongo-app"
    ports:
      - "27018:27017"
    environment:
      MONGO_INITDB_ROOT_DATABASE: otp
    networks:
      - test-network

  api:
    image: springboot-api
    ports:
      - "8080:8080"
    depends_on:
      - api-database
    networks:
      - test-network

networks:
  test-network:
    driver: bridge

application.properties:

spring.data.mongodb.host=api-database

Когда я проверял MongoDb Docker контейнер , используя идентификатор контейнера, он автоматически подключается к базе данных test , но не к базе данных otp , о которой я упоминал в разделе среды файла docker -compose.yml .

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Проблема в том, что ваш контейнер docker не является постоянным, база данных будет стираться и заново создаваться каждый раз, когда вы запускаете контейнер docker.

Если вы добавите VOLUME для сохранения /data/db, вы получите желаемый результат.

Я предполагаю, что у вас есть каталог data/db в том же месте, где вы сохранили docker-compose.yml. Вы можете настроить пользовательский каталог (например, /tmp/data/db)

Попробуйте это:

docker -compose.yml:

version: "3"
services:
  api-database:
    image: mongo:3.2.4
    container_name: "springboot-mongo-app"
    ports:
      - "27018:27017"
    volumes:
      - "./data/db:/data/db"
    environment:
      MONGO_INITDB_ROOT_DATABASE: otp
    networks:
      - test-network

  api:
    image: springboot-api
    ports:
      - "8080:8080"
    depends_on:
      - api-database
    networks:
      - test-network

networks:
  test-network:
    driver: bridge

Примечание: В первый раз это будет пустая база данных. Если вы создаете коллекции, вставляете записи и т. Д. c ... они будут сохранены в ./data/db

0 голосов
/ 12 марта 2020

Я думаю, что вместо MONGO_INITDB_ROOT_DATABASE вы должны использовать MONGO_INITDB_DATABASE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...