弹簧靴&x2B;mysql+;docker&x2B;travis在travis中构建时遇到mysql连接故障
我是码头工人的新手。我已经用mysql配置了spring boot,并编写了docker和docker compose,如下所示。我给了docker compose-f docker-compose.yml-up——在本地构建,它在本地运行良好。当我把它推到GIT上,当travis拿起它时,我会在travis日志中看到下面的异常。我认为它无法连接到mysql弹簧靴&x2B;mysql+;docker&x2B;travis在travis中构建时遇到mysql连接故障,mysql,spring-boot,docker,docker-compose,travis-ci,Mysql,Spring Boot,Docker,Docker Compose,Travis Ci,我是码头工人的新手。我已经用mysql配置了spring boot,并编写了docker和docker compose,如下所示。我给了docker compose-f docker-compose.yml-up——在本地构建,它在本地运行良好。当我把它推到GIT上,当travis拿起它时,我会在travis日志中看到下面的异常。我认为它无法连接到mysql mysql-standalone_1_3deba3f11bd1 | 2020-11-05T15:41:27.929272Z 0 [
mysql-standalone_1_3deba3f11bd1 | 2020-11-05T15:41:27.929272Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
mysql-standalone_1_3deba3f11bd1 | 2020-11-05T15:41:27.938951Z 0 [Note] Event Scheduler: Loaded 0 events
mysql-standalone_1_3deba3f11bd1 | 2020-11-05T15:41:27.939205Z 0 [Note] mysqld: ready for connections.
mysql-standalone_1_3deba3f11bd1 | Version: '5.7.32' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server (GPL)
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:27.949 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:27.950 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
mysql-standalone_1_3deba3f11bd1 | 2020-11-05 15:41:28+00:00 [Note] [Entrypoint]: Temporary server started.
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:28.644 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:28.645 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2615 ms
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:28.939 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
mysql-standalone_1_3deba3f11bd1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
mysql-standalone_1_3deba3f11bd1 | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
mysql-standalone_1_3deba3f11bd1 | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
mysql-standalone_1_3deba3f11bd1 | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:30.199 ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
springboot-docker-container_1_39c0a7e72bdc |
springboot-docker-container_1_39c0a7e72bdc | com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
springboot-docker-container_1_39c0a7e72bdc |
springboot-docker-container_1_39c0a7e72bdc | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
springboot-docker-container_1_39c0a7e72bdc | at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.22.jar!/:8.0.22]
springboot-docker-container_1_39c0a7e72bdc | at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.22.jar!/:8.0.22]
springboot-docker-container_1_39c0a7e72bdc | at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) ~[mysql-connector-java-8.0.22.jar!/:8.0.22]
springboot-docker-container_1_39c0a7e72bdc | at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456) ~[mysql-connector-java-8.0.22.jar!/:8.0.22]
dockerfile
From openjdk:8
ADD target/docker-mk.war docker-mk.war
EXPOSE 8085
ENTRYPOINT ["java", "-jar", "docker-mk.war"]
version: '3'
services:
mysql-standalone:
image: mysql:5.7
environment:
- MYSQL_USER=root
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=root
- MYSQL_DATABASE=demo
ports:
- 3307:3306
healthcheck:
test: mysqladmin ping -h mysql-standalone -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
springboot-docker-container:
image: springboot-docker-container
ports:
- 8089:8085
build:
context: .
dockerfile: Dockerfile
depends_on:
- mysql-standalone
Anything am missing or doing wrong here?
docker compose
From openjdk:8
ADD target/docker-mk.war docker-mk.war
EXPOSE 8085
ENTRYPOINT ["java", "-jar", "docker-mk.war"]
version: '3'
services:
mysql-standalone:
image: mysql:5.7
environment:
- MYSQL_USER=root
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=root
- MYSQL_DATABASE=demo
ports:
- 3307:3306
healthcheck:
test: mysqladmin ping -h mysql-standalone -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
springboot-docker-container:
image: springboot-docker-container
ports:
- 8089:8085
build:
context: .
dockerfile: Dockerfile
depends_on:
- mysql-standalone
Anything am missing or doing wrong here?
-取决于:mysql startalong
只确保mysql容器在spring引导容器之前启动,但不确保mysql服务器已准备好连接
如果您使用一个已有的数据库启动mysql(在您的本地计算机上可能就是这样,因为包含mysql数据的卷不是每次都被清除的,除非您明确地这样做),那么一切都应该很好
但是,如果mysql是从零开始的(travis就是这样),mysql需要一些时间来初始化帐户、数据库、配置等,在此期间尝试连接会导致错误
让我们看看你的日志
mysql-standalone_1_3deba3f11bd1 | 2020-11-05 15:41:28+00:00 [Note] [Entrypoint]: Temporary server started.
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:28.644 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:28.645 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2615 ms
springboot-docker-container_1_39c0a7e72bdc | 2020-11-05 15:41:28.939 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
mysql-standalone_1_3deba3f11bd1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
当您的spring应用程序开始初始化时,mysql刚刚启动了一个临时服务器,并且仍在读取时区设置。因此会引发连接故障
至于解决方案,这里有一个来自博士后的例子
此外,您还可以在入口点文件中使用netcat检查端口(请记住将其安装在dockerfile中),如下所示:
#!垃圾箱/垃圾箱
echo“正在等待数据库…”
虽然nc-z数据库\主机数据库\端口;做
睡眠0.5
完成
echo“数据库已启动。”
java-jar文件
执行官“$@”