spring-boot - Spring Boot 应用程序无法连接到在 Docker 容器中运行的 MySQL 数据库
问题描述
application.yml
:
spring:
profiles: container
datasource:
url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}
username: ${DATABASE_USER}
password: ${DATABASE_PASSWORD}
initialize: true
tomcat:
max-active: 1
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
docker-compose.yml
:
version: '3.1'
services:
demo-mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
spring-boot-app:
image: chinmayee/chinmayee
depends_on:
- demo-mysql
ports:
- 9090:8080
environment:
- DATABASE_HOST=demo-mysql
- DATABASE_PORT=3306
- DATABASE_NAME=chinmayee
- DATABASE_USER=root
- DATABASE_PASSWORD=root
pom.xml
片段:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
</dependencies>
我的应用程序无法连接到容器中运行的 Db。我看到这个错误:
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_171]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_171]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_171]
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211) ~[mysql-connector-java-5.1.46.jar!/:5.1.46]
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301) ~[mysql-connector-java-5.1.46.jar!/:5.1.46]
解决方案
我认为容器 demo-mysql 上的端口 3306 未转发
尝试添加端口配置
version: '3.1'
services:
demo-mysql:
image: mysql:latest
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=root
推荐阅读
- cmd - 从 cmd 执行 .sql 文件到 IBM 服务器 (db2)
- python - Django多对多关系,在两个方向上都包含查询集中的所有ID
- spring-boot - 我正在使用 spring boot 1.4.2 并且我遇到了 oauth2 实现的问题,我怎样才能获得 google 或 facebook 注册 ID
- mongoose - wemos d1 mini的Mongoose配置问题
- python - AWS Lambda(Python + Flask)基本功能无法使用 API Gateway
- javascript - React TypeError:无法使用'in'运算符在null中搜索'length'
- c# - 如何为 API Key 定义创建标头授权?
- java - Circle CI Docker 镜像:Php + Java
- webrtc - 无法在 Chrome 上为本地和远程对等连接获取 Ice Candidates,但是为 Firefox 获取它
- javascript - 将 perl5 编译/转换为可读(不可执行)javascript(或 perl5 到 raku/perl6 到 javascript)