Как подключить приложение dockerized spring boot к докеризированному postgres - PullRequest
0 голосов
/ 24 июня 2019

Я должен написать 3 простых микросервиса, используя пружинную загрузку, и докеризировать их. С тех пор, как я только начал читать о докерах, я столкнулся с несколькими проблемами.

Для создания образов Docker я использую этот плагин maven:

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.0</version>
    <configuration>
        <imageName>example</imageName>
        <baseImage>java</baseImage>
        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <imageTags>
            <imageTag>latest</imageTag>
        </imageTags>
    </configuration>
</plugin>
<Ч />

Требования

  • Контейнеры Docker должны работать без привилегий пользователя ROOT.
  • Сборка сценария maven должна создавать Docker-контейнеры.
  • База данных также должна быть докеризована (все микросервисы используют одну базу данных)

Мои проблемы

У меня есть тестовая служба .jar, и все отлично работает (она подключается к dockerized postgres), но когда я запускаю образ docker (созданный с помощью sudo mvn docker: build) тестовой службы .jar, я не могу подключиться к postgres.

Я обнаружил, что локальный хост в источнике данных может быть проблемой:

spring.datasource.url=jdbc:postgresql://localhost:5432/dockertest

Но я не знаю, что мне поставить вместо localhost.

<Ч />

Буду признателен за любые советы о том, как легко создавать и запускать эти образы докеров (отвечающие вышеуказанным требованиям)

1 Ответ

1 голос
/ 25 июня 2019

Докер не увидит вашего локального хоста. Вы должны создать сеть и присоединиться ко всем службам (см. Команду docker network cli). Затем используйте имя докера приложения для ссылки на него в сети (если имя - abc-service, используйте spring.datasource.url=jdbc:postgresql://abc-service/dockertest).

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

пример docker-compose.yml:

version: '3' services: redis-server: image: 'redis' eureka-server: build: ./eureka-server ports: - "8010:8010" book-service: build: ./book-service build: ./writer-service

затем подключитесь так в соответствующем сервисе application.yml:

redis: host: redis-server port: 6379

...