В настоящее время я пытаюсь создать приложение 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 вручную работает нормально.Чтобы исправить это, я попробовал несколько решений, например
- Игра с командами ENTRYPOINT и RUN внутри файла docker
- Написание сценария ожидания (как описано здесь )
- Написание собственного сценария оболочки (см. вставку ниже)
#!/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
Если кто-нибудь знает правильное решение, я был бы очень признателен!
Спасибо.