使用 docker-compose 无法在同一网络中连接 mysql 和 spring boot
Posted
技术标签:
【中文标题】使用 docker-compose 无法在同一网络中连接 mysql 和 spring boot【英文标题】:using docker-compose unable to connect mysql and spring boot in same network 【发布时间】:2020-05-05 16:45:47 【问题描述】:任何帮助将不胜感激。
我正在尝试在两个容器中运行 mysql 和 spring-boot 应用程序,但是在同一个网络中。
使用以下命令,两个容器相互通信。
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
使用上面的 tow 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】:您的RDS_PORT: 4000
必须改为RDS_PORT: 3306
。
当您将容器端口公开为“4000:3306”时,只能从主机使用端口 4000。在容器网络内,需要使用3306。
【讨论】:
Mysql 正在我的主机上运行。我将端口更改为 3306 并且 docker 引擎给出了一个错误,例如端口已使用。 达蒙...终于,我明白了。对于使用 4000 端口的外部 docker,它可以与容器通信。 Docker 容器内部与 3306 端口通信。妈的……以上是关于使用 docker-compose 无法在同一网络中连接 mysql 和 spring boot的主要内容,如果未能解决你的问题,请参考以下文章
使用`docker-compose run`时无法调试,但`docker-compose up`有效