У меня есть один контейнер postgres и один контейнер с пружинной загрузкой. Я запускаю их обоих с помощью docker-compose.
Ниже приведен файл docker-compose.yml
:
version: '3'
services:
backend:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "8080:8080"
depends_on:
- postgres-db
restart: always
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres-db:5432/testDb
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
postgres-db:
working_dir: /home/models
image: postgres:11.3-alpine
restart: always
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=root
- POSTGRES_DB=testDb
ports:
- "5432:5432"
volumes:
- ./pgdata:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
Вот Dockerfile.dev
FROM maven:3-jdk-8
ENV HOME=/home/usr/app
RUN mkdir -p $HOME
WORKDIR $HOME
ADD pom.xml $HOME
RUN ["/usr/local/bin/mvn-entrypoint.sh", "mvn", "dependency:go-offline"]
ADD . $HOME
RUN ["mvn", "package"]
CMD ["java","-jar","/usr/app/testApp-1.0.0-SNAPSHOT.jar"]
и вотapplication.properties
файл
spring.datasource.url=jdbc:postgresql://postgres-db:5432/testDb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=validate
, но когда я запускаю контейнеры, используя docker-container up
, я получаю сообщение об ошибке, в котором говорится, что соединение с базой данных не удалось, и контейнер останавливается.
Редактировать: Я добавил следующий db-check.sh
файл для проверки состояния db
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD="password" psql -h "$host" -U "root" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
, и новый Dockerfile.dev
выглядит так:
FROM maven:3-jdk-8
ENV HOME=/home/usr/app
RUN mkdir -p $HOME
WORKDIR $HOME
ADD db-check.sh $HOME
RUN chmod +x db-check.sh
RUN ["./db-check.sh", "postgres-db:5432", "/usr/local/bin/mvn-entrypoint.sh", "mvn", "dependency:go-offline"]
ADD . $HOME
RUN ["mvn", "package"]
CMD ["java","-jar","/usr/app/testApp-1.0.0-SNAPSHOT.jar"]
, но для этого скриптадля успешной работы мне нужно установить psql в бэкэнд-контейнер. Есть ли другой способ проверить это, потому что если вы чувствуете, что я помещаю много вещей в этот единственный внутренний контейнер ради простой проверки состояния контейнера postgres.