Как определить имя хоста в docker-compose.yml для MongoDB и Spring Boot - PullRequest
2 голосов
/ 14 мая 2019

Я пытаюсь создать docker-compose.yml с MongoDB и загрузкой Spring.Проблема в том, что я не хочу жестко закодировать какие-либо соединения с базой данных в application.properties.

Spring. Из этой статьи я увидел, что вы можете запустить контейнер mongodb с предопределенным именем хоста.Как я понимаю, все службы, определенные в файле compose yml, находятся в одной сети, но у них разные ips, верно? Итак, главный вопрос - как определить имя хоста mongodb в docker-compose.yml и использовать это имя в файле весенней загрузки application.properties.

Я постараюсь дать как можно больше информациикак я могу, но если что-то неясно, дайте мне знать.

Вот некоторая информация о приложении Spring Boot.

Зависимости, которые я использую в проекте Springявляются:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Приложение имеет интерфейсы, расширяющие MongoRepository:

import org.springframework.data.mongodb.repository.MongoRepository;

public interface ServiceLoggerRepository extends MongoRepository<ExampleEntity, String> {
}

и использует аннотированные сущности @Document

import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "example")
public class ExampleEntity {

    @Id
    private String _id;
    private String name;
}

Соединение с базой данных определенов файл application.properties:

#here is the problem - this the vm ip
spring.data.mongodb.uri=mongodb://192.168.0.51 
spring.data.mongodb.database=mongo-test

Информация о Docker-файле Spring Boot:

FROM openjdk:8-jre
COPY ./mongo-test.jar ./usr/mongo-test.jar
EXPOSE 8080
RUN sh -c 'touch /usr/mongo-test.jar'
ENTRYPOINT ["java","-jar","/usr/mongo-test.jar"]

Информация о docker-compose: Имеет 2 сервиса - MongoDB и Spring Boot.

version: "3"
services:
  mongodb:
    restart: always
    image: mongo
    container_name: "mongodb-test"
    ports:
    - 27017:27017
    command: --smallfiles
  mongo-logger:
    restart: always
    build: ./mongo-test
    container_name: "mongo-test"
    ports:
    - 8080:8080
    depends_on:
    - mongodb
    links:
    - mongodb

Когда контейнер создан и запущен, он работает.Но проблема в том, что я понятия не имею, где и как определить spring.data.mongodb.uri, чтобы использовать что-то статическое, например, spring.data.mongodb.uri=mongodb://mongo-hostname.

Возможно ли это, и есть ли какие-либо ценные решения или хорошие практики дляделать это?

1 Ответ

3 голосов
/ 14 мая 2019

Для доступа к mongodb вам необходимо использовать имя службы mongodb, определенное в docker-compose.yml.

И вы можете установить это в свойствах приложения, используя env vars, как показано ниже:

//aplication.properties
...
spring.data.mongodb.uri=${MONGODB_URI}

и

//docker-compose.yml
version: "3"
services:
  mongodb:
    image: mongo
    container_name: "mongodb-test"
    ports:
    - 27017:27017
  mongo-logger:
    build: ./mongo-test
    container_name: "mongo-test"
    ports:
    - 8080:8080
    environment:
    - MONGODB_URI=mongodb://mongodb
    depends_on:
    - mongodb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...