【发布时间】:2020-05-11 11:42:20
【问题描述】:
编辑:我已经设法让它工作了
我目前正在将 docker 与 Dockerfile 和 docker-compose.yml 结合使用,我正在尝试运行我的后端,以便可以使用 Postman 从数据库中获取数据。但是我不断收到通信链接故障
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
Dockerfile
FROM openjdk:8-jdk-alpine
EXPOSE 8080
ADD /build/libs/assignment_4-0.0.1-SNAPSHOT.jar spring-docker.jar
ENTRYPOINT ["java", "-jar", "spring-docker.jar"]
docker-compose.yml
version: '3'
services:
docker-mysql:
restart: always
container_name: docker-mysql
image: mysql:5.7
environment:
MYSQL_DATABASE: database
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
volumes:
- ./sql:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
app:
image: springio/docker
expose:
- "8080"
ports:
- 8080:8080
environment:
WAIT_HOSTS: mysql:3306
depends_on:
- docker-mysql
application.properties
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://docker-mysql:3306/database
spring.datasource.username=root
spring.datasource.password=root
# To keep the database connection alive while idle for a long time
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
API 是使用 Kotlin 使用 SpringBoot 制作的。有人可以帮我弄清楚如何解决这个问题吗?
【问题讨论】:
-
这是由于mysql服务还没有准备好,你的java服务需要等到mysql服务准备好接受连接,检查这个docs.docker.com/compose/startup-order和github.com/vishnubob/wait-for-it你可以通过重启你的测试应用服务容器。
-
我已添加
command: ["./wait-for-it.sh", "docker-mysql:3306"]行,但问题仍然存在。我之前尝试过重新启动应用程序服务容器,但当时没有用,现在也没有。还有其他想法吗? -
你在
wait-for-it.sh文件中放了什么?您能否更新您的问题以将其也包含在内。 -
我刚刚将它添加到我的 docker-compose 文件中。我自己没有创建 wait-for-it.sh 文件,因为在此处的文档中:docs.docker.com/compose/startup-order 似乎已经有一个预定义的文件
-
只需下载raw.githubusercontent.com/vishnubob/wait-for-it/master/…,并将文件放在与docker-compose.yml相同的目录下即可。
标签: mysql spring-boot docker docker-compose dockerfile