с помощью docker -создать невозможно подключить mysql и пружинную загрузку в одной сети - PullRequest
1 голос
/ 19 января 2020

Любая помощь будет оценена. Я пытаюсь запустить mysql и приложение весенней загрузки в двух контейнерах, но в том же netowrk. С помощью следующей команды два контейнера общаются друг с другом. mysql команда docker run --name mysql-local --network=spring-boot-network -p 4000:3306 -d -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=root-user -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=testdb mysql прикладная команда docker run --network=spring-boot-network -p 8080:8080 --name test-app -e RDH_HOSTNAME:mysql-local -e RDS_PORT:4000 -e RDS_USER:root-user -e -e RDS_PASSWORD:password 171ce195f461

с использованием вышеприведенной команды docker в spring-boot-network созданы два контейнера и они могут общаться друг с другом. проблема возникает, когда я пытался использовать docker -compose. Я прошел ту же среду, что и командная строка, но мое приложение отказывается соединяться с mysql.

Я использую плагин spotify для создания образа.

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.3</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>rajesh132/test-docker</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

при запуске контейнера mysql контейнер создается и запускается. Я могу подключиться к нему с помощью mysqlsh клиента и mysql рабочего места. Однако я не могу подключиться к своему приложению. Ниже приведены свойства и docker файлы, которые я использовал в своем проекте. Docker файл

ADD target/docker-test.jar docker-test.jar
ENTRYPOINT ["java", "-jar", "docker-test.jar"]

Docker Создать файл

version: '3.7'
services:
  spirng-boot-test-application:
    image: rajesh132/test-docker:0.0.1-SNAPSHOT
      #build:
      #context: .
    #dockerfile: Dockerfile
    ports:
      - "8080:8080"
    restart: always
    depends_on: # Start the depends_on first
      - mysql-app
    environment:
      RDS_HOSTNAME: mysql-app
      RDS_PORT: 4000
      RDS_DB_NAME: testdb
      RDS_USERNAME: test-user
      RDS_PASSWORD: password
    networks:
      - web-application-network

  mysql-app:
    image: mysql
    ports:
      - "4000:3306"
    restart: always
    environment:

      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: test-user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: testdb
    volumes:
      - mysql-database-data-volume:/var/lib/mysql
    networks:
      - web-application-network

# Volumes
volumes:
  mysql-database-data-volume:

networks:
  web-application-network:

application.yml

  datasource:
    #  use this url for localhost
    #use docker container name instead 'localhost'
    #  url: jdbc:mysql://localhost:3306/authorizationDb?createDatabaseIfNotExist=true
    url: jdbc:mysql://${RDS_HOSTNAME:localhost}:${RDS_PORT:3306}/${RDS_DB_NAME:test}?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true
    username: ${RDS_USER:root}
    password: ${RDS_PASSWORD:password}
    driver-class-name: com.mysql.cj.jdbc.Driver
    initialization-mode: always
    tomcat:
      test-on-borrow: true
      validation-query: SELECT 1
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true
        format_sql: true
    database-platform: org.hibernate.dialect.MySQL8Dialect

logging:
  level:
    org:
      hibernate:
        type: trace

Я следил за многими блогами, документацией, но не смог построить. Любую помощь очень ценю.

1 Ответ

1 голос
/ 19 января 2020

Вместо этого RDS_PORT: 4000 должно быть RDS_PORT: 3306.

Когда порт контейнера отображается как «4000: 3306», порт 4000 можно использовать только с хост-компьютера. Внутри контейнерной сети необходимо использовать 3306.

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