【发布时间】:2018-08-16 22:22:22
【问题描述】:
我正在尝试将我的 Spring-Boot 应用程序(一个容器)连接到 MySQL 数据库(另一个容器)。启动 Java 应用程序时出现以下错误:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
这是我的docker-compose.yml:
version: "3"
services:
db:
image: mysql:8
environment:
- MYSQL_ROOT_PASSWORD=family
- MYSQL_DATABASE=family_db
- MYSQL_USER=family_user
- MYSQL_PASSWORD=family
ports:
- 9999:3306
web:
build:
context: .
dockerfile: Dockerfile-spring
image: family:latest
depends_on:
- db
ports:
- 0:8080
environment:
# - DATABASE_HOST=db
- DATABASE_USER=family_user
- DATABASE_PASSWORD=family
- DATABASE_NAME=family_db
- DATABASE_PORT=3306
# - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/family_db?useUnicode=true&characterEncoding=utf8&useSSL=false
# - spring.datasource.url=jdbc:mysql://mysql:3306/test?useSSL=false
# - spring.datasource.username=family_user
# - spring.datasource.password=family
# - spring.datasource.driver-class-name=com.mysql.jdbc.Driver
angular:
container_name: angular-container
build:
context: angular-app
dockerfile: Dockerfile-angular
ports:
- 0:80
这是我的 Dockerfile-spring:
FROM openjdk:8
VOLUME /tmp<br> COPY target/family.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
我应该怎么做才能为我的 Spring-Boot 应用程序打开 MySQL 端口?
【问题讨论】:
-
尝试将
DATABASE_PORT=3306更改为DATABASE_PORT=9999,因为这是您在其他容器上公开的端口 -
当我将端口更改为 9999 时,spring boot 会抛出有关未知驱动程序类的异常。我在我的 pom.xml 中添加了 mysql 驱动程序。我虽然我必须连接在 Docker 内部的端口 3306。
-
如果您通过环境变量设置驱动程序类(看起来是这样),然后尝试使用 SPRING_DATASOURCE_DRIVER_CLASS_NAME
-
我在 Spring Boot 中为配置文件添加了不同的应用程序属性。当我在生产应用程序属性中将用户名的名称更改为“root”时,它有时有效,有时无效。我不知道该怎么办。驱动程序的异常消失了,因为它是在属性文件中指定的。
-
我刚刚将 docker-compose.yml 更新为
标签: java spring-boot docker-compose