я пытаюсь развернуть веб-сервис, созданный на основе Spring-Boot на docker, используя docker -compose и получая UnknownHostException
, когда Spring запускается, так как Spring-Boot будет проверять соединение при запуске. Приложение сохраняет данные на сервере mysql, используя spring-jpa для доступа к постоянному слою. Когда я пытаюсь использовать docker-compose up
и из журналов я вижу журналы только о создании службы приложений, а не о сервере mysql, я новичок в docker, и вы найдете ниже Dockerfile
, docker-compose.yml
и соответствующие файлы конфигурации ,
Я потратил десятки часов, пытаясь выяснить, в чем дело, я ищу в inte rnet, где многие упоминают, что, возможно, служба весенней загрузки не ожидает запуска контейнера mysql, поэтому я использовались другие опции, включая wait-for-it
скрипт.
Вот мой docker -компонентный файл.
version: '3.3'
services:
app_database:
image: mysql:5.7
restart: on-failure
ports:
- 3306:3306
volumes:
- mysql_db_data_container:/var/lib/mysql
expose:
- 3306
networks:
- cyb-networks
environment:
MYSQL_DATABASE: '*database_name*'
MYSQL_USER: 'root'
MYSQL_ROOT_PASSWORD: '*password*'
MYSQL_PASSWORD: '*password*'
app_service:
restart: on-failure
build:
context: ./
dockerfile: Dockerfile
ports:
- 8080:8080
depends_on:
- app_database
links:
- app_database
networks:
- cyb-networks
networks:
cyb-networks:
volumes:
mysql_db_data_container:
файл Dockerfile
FROM maven:3.5.2-jdk-8-alpine
COPY pom.xml /tmp/
COPY tomcat-users.xml /tmp/
COPY src /tmp/src/
WORKDIR /tmp/
RUN mvn package
FROM tomcat:9.0-jre8-alpine
COPY /tmp/target/AppService-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/AppService-0.0.1-SNAPSHOT.war
COPY /tmp/tomcat-users.xml /usr/local/tomcat/conf/tomcat-users.xml
CMD ["./wait-for-it.sh", "app_database:","catalina.sh", "run"]
И ожидание for-it. sh file
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
Хотя имена переменных в приведенном выше скрипте имеют postgres имен, я предположил, что это просто имена переменных и не повлияет на их назначение docker сделать c. С этими настройками так много проблем, что я, кажется, не зацикливаюсь на них, например, не могу использовать пользовательский интерфейс tomcat-admin, и каждый раз, когда я запускаю docker-compose up
, зависимости загружаются снова.
Это выдержка из весеннего файла application.properties
spring.datasource.url = jdbc:mysql://app_database:3306/*database_name*?useSSL=false
spring.datasource.username = root
spring.datasource.password = *password*
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
Может кто-нибудь помочь мне решить эту проблему, пожалуйста? Спасибо.