Не удается подключиться к серверу MySQL в приложении Spring в Docker?

Я новичок в Docker, в рамках докеризации приложения spring mvc я не могу подключить свое приложение к серверу MySQL

Dockerfile: это приложение Spring mvc, поэтому мне нужно скопировать мою войну в

 tomcat container
    FROM tomcat:8.0.20-jre8
    COPY /target/CTH.war /usr/local/tomcat/webapps/

docker-compose.yml

  version: '3'
services:
  mysql-standalone:
    image: 'mysql:5.7'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD= root
      - MYSQL_USER= root
      - MYSQL_PASSWORD= root
      - MYSQL_DATABASE= CTH
      - MYSQL_DATABASE= CTH_CHAT
    ports:
      - "3307:3306"
  cth-docker-container:
    image: cth-docker-container
    ports:
      - "8082:8082"
    environment:
      CTH_DATASOURCE_DATABASE: CTH
      CTH_DATASOURCE_SERVERNAME: mysql-standalone
      CTH_DATASOURCE_USERNAME: root
      CTH_DATASOURCE_PASSWORD: root
      CTH_DATASOURCE_PORT: 3307

      CTH_CHAT_DATASOURCE_DATABASE: CTH_CHAT
      CTH_CHAT_DATASOURCE_SERVERNAME: mysql-standalone
      CTH_CHAT_DATASOURCE_USERNAME: root
      CTH_CHAT_DATASOURCE_PASSWORD: root
      CTH_CHAT_DATASOURCE_PORT: 3307

    build:
      context: "./"
      dockerfile: "Dockerfile"
    depends_on:
      - mysql-standalone

application.properties: это приложение Spring mvc, и приложение использует MySQL db с двумя базами данных

1st db
dbuser.local=${CTH_DATASOURCE_USERNAME:root}
dbpassword.local=${CTH_DATASOURCE_PASSWORD:root}
dbdatabaseName.local=${CTH_DATASOURCE_DATABASE:CTH}
dbserverName.local=${CTH_DATASOURCE_SERVERNAME:localhost}
dbportNumber.local=${CTH_DATASOURCE_PORT:3306} 

2nd db
dbuser.cth.chat.local=${CTH_CHAT_DATASOURCE_USERNAME:root}
dbpassword.cth.chat.local=${CTH_CHAT_DATASOURCE_PASSWORD:root}
dbdatabaseName.cth.chat.local=${CTH_CHAT_DATASOURCE_USERNAME:CTH_CHAT}
dbserverName.cth.chat.local=${CTH_CHAT_DATASOURCE_SERVERNAME:localhost}
dbportNumber.cth.chat.local=${CTH_CHAT_DATASOURCE_PORT:3306}

Я читал статьи, из которых я создал файл dockerfile и файл docker-compose https://medium.com/@asce4s/dockerize-spring-mvc-application-a9ffbd11eadb https://github.com/abagayev/docker-bootstrap-collection/tree/master/mysql-few-databases/docker/provision/mysql/init < / а>

но я получаю следующие ошибки, когда выполняю docker-compose -f docker-compose.yml up

Я застрял и не получаю, если я установил неправильную среду или мой способ неверен, любое ваше предложение, я обязательно помогу мне, спасибо!

Прочитав множество статей, я успешно обновил свое приложение с MySQL db в контейнере докеров и получил доступ в Mysql workbench.


person Shivam Patil    schedule 06.01.2021    source источник
comment
Примечание: описанное выше может быть не единственной проблемой, но она определенно уже в пути.   -  person Zeitounator    schedule 06.01.2021
comment
Вызвано: com.mysql.cj.core.exceptions.CJCommunicationsException: сбой канала связи cth-docker-container_1 | cth-docker-container_1 | Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил пакетов от сервера. cth-docker-container_1 | в java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) cth-docker-container_1 | в java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) cth-docker-container_1 | в java.base / jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) cth-docker-container_1 | в java.base / java.lang.reflect.Constructor.newInstance (Constructor.java:490) cth-docker-container_1 | в com.mysql.cj.core.exceptions.ExceptionFactory.createException (ExceptionFactory.java:54) cth-docker-container_1 | в com.mysql.cj.core.exceptions.ExceptionFactory.createException (ExceptionFactory.java:93) cth-docker-container_1 | в com.mysql.cj.core.exceptions.ExceptionFactory.createException (ExceptionFactory.java:133) cth-docker-container_1 | в com.mysql.cj.core.exceptions.ExceptionFactory.createCommunicationsException (ExceptionFactory.java:149) cth-docker-container_1 | в com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect (MysqlaSocketConnection.java:83) cth-docker-container_1 | в com.mysql.cj.mysqla.MysqlaSession.connect (MysqlaSession.java:122) cth-docker-container_1 | в com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:1754) cth-docker-container_1 | в com.mysql.cj.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:1624) cth-docker-container_1 | ... 125 опущенных общих фреймов cth-docker-container_1 | Вызвано: java.net.UnknownHostException: mysql-standalone cth-docker-container_1 | в java.base / java.net.InetAddress $ CachedAddresses.get (InetAddress.java:797) cth-docker-container_1 | в java.base / java.net.InetAddress.getAllByName0 (InetAddress.java:1505) cth-docker-container_1 | в java.base / java.net.InetAddress.getAllByName (InetAddress.java:1364) cth-docker-container_1 | в java.base / java.net.InetAddress.getAllByName (InetAddress.java:1298) cth-docker-container_1 | в com.mysql.cj.core.io.StandardSocketFactory.connect (StandardSocketFactory.java:179) cth-docker-container_1 | на com.mysql.cj.mysqla.io. MysqlaSocketConnection.connect (MysqlaSocketConnection.java:57) cth-docker-container_1 | ... 128 общих кадров пропущено   -  person Zeitounator    schedule 06.01.2021


Ответы (1)


вот мой файл для создания докеров

вам необходимо создать файл дампа, обратитесь к статье [https://github.com/abagayev/docker-bootstrap-collection/tree/master/mysql-few-databases]

version: '3'

services:
  app:
    container_name: cth-app
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '8080:8080'
    environment:
      ##db1
      CTH_DATASOURCE_DATABASE: CTH
      CTH_DATASOURCE_HOST: mysqldb
      CTH_DATASOURCE_USERNAME: cth
      CTH_DATASOURCE_PASSWORD: root
      CTH_DATASOURCE_PORT: 3306

      ##db2
      CTH_CHAT_DATASOURCE_DATABASENAME: CTH_CHAT
      CTH_CHAT_DATASOURCE_HOST: mysqldb
      CTH_CHAT_DATASOURCE_USERNAME: cth
      CTH_CHAT_DATASOURCE_PASSWORD: root
      CTH_CHAT_DATASOURCE_PORT: 3306
    depends_on:
      - mysqldb

  mysqldb:
    image: mysql/mysql-server:5.7
    container_name: mysqldb
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ##here i am able to access dump file which I'll create two databases 
      with user created for me.
    volumes:
      - ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
    ports:
      - '3308:3306'
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: cth
        MYSQL_PASSWORD: root

когда ты docker-compose up -d --build

ваше приложение запущено на порту 8080, а база данных MySQL работает внутри хост-машины

Спасибо!

Пожалуйста, просмотрите официальную документацию образа mysql. Вы неправильно это используете.

version: '3'

services:
  app:
    container_name: cth-app
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '8080:8080'
    environment:
      ##db1
      CTH_DATASOURCE_DATABASE: CTH
      CTH_DATASOURCE_HOST: mysqldb
      CTH_DATASOURCE_USERNAME: cth
      CTH_DATASOURCE_PASSWORD: root
      CTH_DATASOURCE_PORT: 3306

      ##db2
      CTH_CHAT_DATASOURCE_DATABASENAME: CTH_CHAT
      CTH_CHAT_DATASOURCE_HOST: mysqldb
      CTH_CHAT_DATASOURCE_USERNAME: cth
      CTH_CHAT_DATASOURCE_PASSWORD: root
      CTH_CHAT_DATASOURCE_PORT: 3306
    depends_on:
      - mysqldb

  mysqldb:
    image: mysql/mysql-server:5.7
    container_name: mysqldb
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ##here i am able to access dump file which I'll create two databases 
      with user created for me.
    volumes:
      - ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
    ports:
      - '3308:3306'
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: cth
        MYSQL_PASSWORD: root
будет конфликтовать с пользователем root по умолчанию, создаваемым при инициализации базы данных. Используйте другое имя пользователя или не создавайте пользователя по умолчанию (удалите переменные env для пользователя / пароля). Проверьте журнал контейнера базы данных: я на 99,9% уверен, что процесс init либо мертв, либо зацикливается, и что ваша база данных не работает с данными, которые вы думаете. См. этот другой ответ.

person Shivam Patil    schedule 13.01.2021