mysql - Docker-compose MySQL 链接失败
问题描述
编辑:我设法让它工作
我目前正在将 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"]
码头工人-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
应用程序属性
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 制作的。有人可以帮我弄清楚如何解决这个问题吗?
解决方案
要实现正确的服务启动顺序,您需要添加 2 件事:
- 设置容器的名称,让它们通过这些名称相互 ping 通(通过 docker 桥)
- 强制您的应用程序在连接之前等待 DB 完全启动。
从这一点来看,您的 Dockerfile 可能看起来像这样(让我们选择wait-for-it
)
FROM openjdk:8-jdk-alpine
EXPOSE 8080
RUN apk add --no-cache bash
RUN wget -q https://github.com/vishnubob/wait-for-it/raw/master/wait-for-it.sh -O /usr/bin/wait-for-it && \
chmod +x /usr/bin/wait-for-it
ADD /build/libs/assignment_4-0.0.1-SNAPSHOT.jar spring-docker.jar
ENTRYPOINT /usr/bin/wait-for-it docker-mysql-container:3306 -t 120 ; java -jar spring-docker.jar
虽然docker-compose.yml
应该包括
version: '3'
networks:
database:
services:
docker-mysql:
networks:
- database
container_name: docker-mysql-container
...
app:
networks:
- database
container_name: app-container
...
并用容器名称替换您的application.properties
服务名称docker-mysql
docker-mysql-container
推荐阅读
- javascript - 如何返回不匹配的单词?
- asp.net-core - 用于 asp.net 核心重复规则的 NLog nlog.config
- database - Go中mongodb驱动程序中比较的时间精度问题,可能在其他语言和其他数据库中
- mongodb - 聚合 - MongoDB:按 id 对不同的值求和
- netlogo - 要求代理在特定时间段内的行为,并延长时间
- git - 减少 git 工作流程中的步骤
- networking - IP地址和网络
- html - 如何将其中一个子 div 居中在容器 div 上?
- java - 将电缆调制解调器配置文件转换为 json/xml/java 对象
- java - 如何使更新数据工作得很好?