mysql - 使用docker-compose无法在同一网络中连接mysql和spring boot

标签 mysql spring-boot docker docker-compose

任何帮助将不胜感激。
我试图在两个容器中运行mysql和spring-boot应用程序,但是在同一个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 Compose文件
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

我关注了那么多博客和文档,但是成功建立了许多博客。任何帮助,不胜感激。

最佳答案

您的RDS_PORT: 4000必须改为RDS_PORT: 3306

将容器端口公开为“4000:3306”时,只能在主机上使用端口4000。在容器网络内,您需要使用3306。

关于mysql - 使用docker-compose无法在同一网络中连接mysql和spring boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810341/

相关文章:

java - 线程“kafka-生产者-网络-线程”中未捕获的异常 |生产者1

hibernate - HikariCP - 连接不可用

postgresql - 启动 postgres 容器时出错 - mkdir : Permission denied

python - Docker 在 Heroku 中部署错误 - 权限被拒绝

java - 使用 Docker Compose 连接到另一个容器中运行的 mysql

javascript - 修改PHP使用JS/JQuery与MySQL通信

java - @Transactional 方法测试失败 :Concurrent update in table "WORK": another transaction has updated or deleted the same row

mysql - 从 TokuDB 查询创建临时表太慢

php - 按 UserID 对结果进行分组,然后创建列数据数组

java - Java 获取字符的最大值