Запуск приложения Spring Boot / PostgreSQL в одном контейнере - PullRequest
0 голосов
/ 03 декабря 2018

В настоящее время я пытаюсь создать приложение Spring Boot в контейнере Alpine / PostgreSQL, который (на более поздних этапах) будет связываться с другими контейнерами Docker с помощью сообщений Kafka.

После поиска решений в последние несколько днейЯ публикую свой вопрос здесь.Моя текущая проблема заключается в том, что мой контейнер не работает, когда я пытаюсь его запустить - в настоящее время я получаю следующее сообщение об ошибке:

org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
[...]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
[...]
org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
[...]
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
[...]
Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
[...]
Caused by: java.net.ConnectException: Connection refused (Connection refused)

Так что похоже, что приложение Spring Boot запускается перед базой данныхпотому что запуск образа без команды ENTRYPOINT и запуск файла .jar вручную работает нормально.Чтобы исправить это, я попробовал несколько решений, например

  1. Игра с командами ENTRYPOINT и RUN внутри файла docker
  2. Написание сценария ожидания (как описано здесь )
  3. Написание собственного сценария оболочки (см. вставку ниже)
#!/bin/bash

sleep 3
sudo -u postgres postgres -D /var/lib/postgresql/data
sleep 3
java -jar persistence.jar

Я получаю следующее исключение при попытке третьего решения:

postgres cannot access the server configuration file "/var/lib/postgresql/data/postgresql.conf": No such file or directory

Итак, в итоге ни одно из решений не сработало.


SETUP

Вот мой докер-файл:

FROM postgres:9.3-alpine

ADD target/persistence-0.0.1.jar persistence.jar
ADD init-container.sh init-container.sh

ENV POSTGRES_DB test
ENV POSTGRES_USER test
ENV POSTGRES_PASSWORD password

RUN apk add --no-cache bash
RUN apk add sudo
RUN apk add openjdk8

ENTRYPOINT ["bash", "init-container.sh"]

А вот команды build и run:

docker build -t persistence .
docker run --name persistence -p 2002:2002 -d persistence

Если кто-нибудь знает правильное решение, я был бы очень признателен!

Спасибо.

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