java使用DockerCompose运行多个SpringBoot应用程序
我有两个Spring应用程序共享同一个Mysql数据库。 当我在没有docker compose的情况下运行它们时,它们工作得非常好。我的主机是Windows 10 professional
应用程序。性质
server.port=8085
spring.jpa.show-sql=true
spring.jackson.serialization.write-dates-as-timestamps=false
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306 /webDatabase?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=my-secret-pw
Dockerfile
FROM openjdk:8-jdk-alpine
ADD target/web-spring-boot.jar web-spring-boot.jar
EXPOSE 8085
ENTRYPOINT ["java","-jar", "web-spring-boot.jar"]
我创建了这个docker compose。yml基于其他示例
version: '3'
services:
web:
build: ./web
ports:
- "8085:8085"
depends_on:
- "database"
solver:
build: ./solver
ports:
- "8095:8095"
depends_on:
- "database"
database:
image: "mysql:latest"
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=my-secret-pw
- MYSQL_DATABASE=webDatabase
healthcheck:
test: "/usr/bin/mysql --user=root --password=my-secret-pw --execute \"SHOW DATABASES;\""
interval: 10s
timeout: 20s
retries: 10
volumes:
logvolume01: {}
它不起作用。启动后,只有Mysql容器正在运行
下面是Spring日志的部分输出
solver_1 | 2019-01-04 22:55:15.698 WARN 1 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S01 solver_1 | 2019-01-04 22:55:15.698 ERROR 1 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Communications link failure solver_1 | solver_1 | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
配置中缺少什么?当运行组合时application.properties
是否被忽略
# 1 楼答案
Spring引导应用程序尝试连接到localhost:3306。只要它们不在容器中运行,就可以正常工作
在容器内运行时,还尝试针对localhost建立连接(但这次是在spring boot docker容器内)。这显然是失败的,因为在spring引导容器中没有mysql在运行
mysql服务可以通过其别名(数据库)在docker网络中访问
重新配置弹簧。数据源。链接到
这可以在应用程序中完成。属性或使用docker compose文件中的环境变量
# 2 楼答案
我终于可以运行这个应用程序了
以下是配置
docker撰写。yml
# 3 楼答案
而不是在应用程序中硬编码MySQL数据源字符串。属性,您可以从docker compose配置传递它。此外,您正在使用docker compose中定义的服务名称“database”在应用程序中创建硬编码条目。财产
请避免这样做,并执行以下操作:
注意:您可以通过替换点(.)将任何Spring Boot公共应用程序属性转换为环境变量带下划线(41;