2017-12-21 2 views
0

Ich versuche auf eine Spring-Boot-Anwendung in einem Docker-Container, verknüpft mit einem Docker mysql-Container ausgeführt. Wenn ich versuche, um die Docker Behälter mit dem Feder Boot-Anwendung zu laufen innerhalb ich die folgende Fehlermeldung:Spring Boot-Anwendung mit mysql-Container funktioniert, aber mit Spring Boot-Anwendungscontainer tut es nicht

017-12-21 14:13:12,587 INFO [localhost-startStop-1] VersionPrinter : Flyway 4.2.0 by Boxfuse 
2017-12-21 14:13:12,590 INFO [localhost-startStop-1] HikariDataSource : HikariPool-1 - Starting... 
2017-12-21 14:13:13,913 ERROR [localhost-startStop-1] HikariPool : HikariPool-1 - Exception during pool initialization. 
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
     at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:461) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989) 
     at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341) 
     at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189) 
     at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222) 
     at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017) 
     at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779) 
     at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
     at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:461) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
     at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389) 
     at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) 
     at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:117) 
     at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:123) 
     at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:375) 
     at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:204) 
     at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:459) 
     at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:533) 
     at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:114) 
     at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:97) 
     at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:51) 
     at org.flywaydb.core.Flyway.execute(Flyway.java:1418) 
     at org.flywaydb.core.Flyway.migrate(Flyway.java:971) 
     at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:304) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:225) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1013) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:335) 
     at org.springframework.orm.jpa.EntityManagerFactoryUtils.findEntityManagerFactory(EntityManagerFactoryUtils.java:121) 
     at org.springframework.orm.jpa.EntityManagerFactoryAccessor.setBeanFactory(EntityManagerFactoryAccessor.java:154) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1732) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1697) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) 
     at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:392) 
     at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:364) 
     at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration$JpaWebMvcConfiguration$$EnhancerBySpringCGLIB$$f8138739.openEntityManagerInViewInterceptor(<generated>) 
     at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration$JpaWebMvcConfiguration.addInterceptors(JpaBaseConfiguration.java:242) 
     at org.springframework.web.servlet.config.annotation.WebMvcConfigurerComposite.addInterceptors(WebMvcConfigurerComposite.java:88) 
     at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration.addInterceptors(DelegatingWebMvcConfiguration.java:83) 
     at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.getInterceptors(WebMvcConfigurationSupport.java:332) 
     at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.requestMappingHandlerMapping(WebMvcConfigurationSupport.java:284) 
     at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration.requestMappingHandlerMapping(WebMvcAutoConfiguration.java:478) 
     at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$19c5cac1.CGLIB$requestMappingHandlerMapping$1(<generated>) 
     at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$19c5cac1$$FastClassBySpringCGLIB$$68349f44.invoke(<generated>) 
     at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
     at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361) 
     at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$19c5cac1.requestMappingHandlerMapping(<generated>) 
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.base/java.lang.reflect.Method.invoke(Method.java:538) 

Wenn ich die Feder Boot-Anwendung versuchen laufen, ohne sie in einem Docker Behälter, die Verbindung mit dem MySQL-Container funktioniert.

ist dies die application.yml ich für das Frühjahr Boot-Anwendung verwenden:

server: 
    port: 8081 

spring: 
    datasource: 
     username: root 
     password: root 
     testWhileIdle: true 
     validationQuery: SELECT 1 
     jdbcUrl: jdbc:mysql://127.0.0.1:6603/data 
     type: com.zaxxer.hikari.HikariDataSource 
    jpa: 
     show-sql: true 
     generate-ddl: false 
     hibernate: 
      ddl-auto: none 
      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy 

flyway: 
    datasource: 
     username: root 
     password: root 
     jdbcUrl: jdbc:mysql://127.0.0.1:6603/data 
     type: com.zaxxer.hikari.HikariDataSource 
     flyway: 
      locations: classpath:/db/migration 


logging: 
    file: logs/cookbook-journal.log 
    pattern: 
     console: "%d %-5level [%thread] %logger{0} : %msg%n" 
     file: "%d %-5level [%thread] %logger{0} : %msg%n" 
    level: 
     root: INFO 
     org.springframework.security: DEBUG 

security: 
oauth2: 
    resource: 
    userInfoUri: http://localhost:8081/me 

und für Dockerfile:

FROM java:9 

ADD target/ /opt/cookbook-journal/ 

ENTRYPOINT ["/usr/bin/java", "-jar", "/opt/cookbook-journal/CookbookJournalBackend.jar"] 

und Docker-compose.yml für die beiden Behälter in einem Docker Netzwerk ausgeführt werden :

version: '3' 
services: 
    mysql: 
    image: cookbook-mysql 
    container_name: mysql 
    ports: 
     - "6603:3306" 
    networks: 
     - bridge 
    backend: 
    image: cookbook-backend-img 
    container_name: server 
    ports: 
     - "8081:8081" 
    depends_on: 
     - mysql 
    links: 
     - mysql 
    networks: 
     - bridge 
networks: 
    bridge: 
    driver: bridge 

[EDIT] Dies ist Dockerfile für mysql Container:

FROM mysql 
ENV MYSQL_HOST=mysql 
ENV MYSQL_DATABASE=data 
ENV MYSQL_ROOT_PASSWORD=root 

RUN echo [mysqld] > /etc/mysql/my.cnf 
RUN echo lower_case_table_names=1 >> /etc/mysql/my.cnf 

Jeder, der so ein Problem hatte?

Danke!

Antwort

2

Sie haben den mysql-Container verknüpft, versuchen Sie es.

spring: 
    datasource: 
     jdbcUrl: jdbc:mysql://mysql:3306/data 

flyway: 
    datasource: 
     jdbcUrl: jdbc:mysql://mysql:3306/data 
+2

Und die Flyway-URL muss identisch sein. –

+0

Sicher, danke Simon. –

+0

Es funktioniert nicht. Ich bekomme immer noch die gleiche Fehlermeldung: ERROR [localhost-startStop-1] HikariPool: HikariPool-1 - Ausnahme während der Pool-Initialisierung. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler Das letzte erfolgreich an den Server gesendete Paket war vor 0 Millisekunden. Der Treiber hat keine Pakete vom Server erhalten. –

Verwandte Themen