Docker -составить не запущенную службу mysql, а только службу весенней загрузки с UnknownHostException при подключении к базе данных, почему? - PullRequest
0 голосов
/ 23 марта 2020

я пытаюсь развернуть веб-сервис, созданный на основе 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

Может кто-нибудь помочь мне решить эту проблему, пожалуйста? Спасибо.

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