简体   繁体   English

Spring Boot docker无法连接到mysql(连接被拒绝/ createCommunicationsException)

[英]Spring boot docker Cannot connect to mysql (Connection refused / createCommunicationsException)

Alright so i have spring-boot java application, mysql db and nginx. 好吧,所以我有spring-boot java应用程序,mysql db和nginx。 I start them and it looks like this (command i use is docker-compose up that is all i need to execute): 我启动它们,看起来像这样(我使用的命令是docker-compose up ,这是我需要执行的全部操作): 在此处输入图片说明

The Error that i have in my application workaround_app_1 is following: 我在应用程序中workaround_app_1遇到的错误如下:

     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.4.RELEASE)

14:46:59.083 INFO [c.b.w.WorkaroundApplication]  Starting WorkaroundApplication on 9b42d0d4614b with PID 48 (/app/target/classes started by root in /app)
14:46:59.089 INFO [c.b.w.WorkaroundApplication]  The following profiles are active: devdock
14:47:11.985 INFO [o.a.c.h.Http11NioProtocol]  Initializing ProtocolHandler ["https-jsse-nio-8080"]
14:47:12.015 INFO [o.a.c.c.StandardService]  Starting service [Tomcat]
14:47:12.016 INFO [o.a.c.c.StandardEngine]  Starting Servlet engine: [Apache Tomcat/9.0.17]
14:47:13.993 INFO [o.a.c.c.C.[.[.[/workaround]]  Initializing Spring embedded WebApplicationContext
14:47:13.996 INFO [o.s.w.c.ContextLoader]  Root WebApplicationContext: initialization completed in 14635 ms
14:47:17.906 INFO [c.z.h.HikariDataSource]  HikariPool-1 - Starting...
14:47:19.294 ERROR [c.z.h.p.HikariPool]  HikariPool-1 - Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.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 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
        at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136)
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
        at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:115)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:78)
        at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:319)
        at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:356)
        at org.springframework.boot.autoconfigure.orm.jpa.DatabaseLookup.getDatabase(DatabaseLookup.java:73)
        at org.springframework.boot.autoconfigure.orm.jpa.JpaProperties.determineDatabase(JpaProperties.java:142)
        at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.jpaVendorAdapter(JpaBaseConfiguration.java:113)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration$$EnhancerBySpringCGLIB$$aadd42f9.CGLIB$jpaVendorAdapter$4(<generated>)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration$$EnhancerBySpringCGLIB$$aadd42f9$$FastClassBySpringCGLIB$$962bc1e0.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(Configuratio

That goes on and one till at the end you see 这样下去,直到最后你看到

    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:490)
        at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
        at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
        at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
        at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
        at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91)
        at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
        at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
        ... 188 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
        at java.base/java.net.Socket.connect(Socket.java:591)
        at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
        at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
        ... 191 common frames omitted

This is my docker-compose: 这是我的码头工人组成:

version: '3'
services:
  nginx:
   container_name: some-nginx
   image: nginx:1.13
   restart: always
   ports:
   - 8080:8080
   volumes:
   - ./nginx/conf.d:/etc/nginx/conf.d
   depends_on:
   - app

  mysql:
   container_name: workaround-mysql
   image: mysql/mysql-server:5.7
   environment:
    MYSQL_DATABASE: workaround
    MYSQL_USER: springuser
    MYSQL_PASSWORD: admin
    MYSQL_ROOT_PASSWORD: admin
    MYSQL_ROOT_HOST: '%'
   ports:
   - "3308:3306"
   restart: always

  app:
    restart: always
    build: ./
    working_dir: /app
    volumes:
      - ./:/app
      - ~/.m2:/root/.m2
    expose:
      - "8080"
    command: mvn clean spring-boot:run
    depends_on:
      - mysql

And here is my application.properties: 这是我的application.properties:

###################################
#---------DATABASE
###################################
#
# URL for the mysql db
spring.datasource.url=jdbc:mysql://workaround-mysql:3308/workaround?serverTimezone=UTC&max_allowed_packet=15728640
# User name in mysql
spring.datasource.username=springuser
# Password for mysql
spring.datasource.password=admin

My Dockerfile only contains one liner: FROM openjdk:12-jdk 我的Dockerfile仅包含一个内衬: FROM openjdk:12-jdk

All of that in mind, What is happening why i cannot connect to my database? 考虑到所有这些,为什么无法连接到数据库会发生什么情况? When i do it out of docker, all works fine on localhost. 当我在docker上执行此操作时,在localhost上一切正常。 Bud cant get it working with this setup. 芽无法使用此设置。 Could that be that somehow my workaround_app_1 started sooner then mysql and now cant function? 难道是因为我的workaround_app_1早于mysql就开始了,现在却无法运行吗? Bud in my docker-compose I specified that it depends on mysql to be started right ?Im new to docker + nginx. 在我的docker-comd中发出芽,我指定它取决于要正确启动的mysql吗?我是docker + nginx的新手。

Notes: 笔记:

I have tried different ports for mysql bud that doesnt seem to be issue. 我已经尝试了mysql芽的不同端口,但这似乎不是问题。 I also dont think its issue with resources or anything related so hardware constraints. 我也不认为它与资源或任何与硬件限制相关的问题。 Are my configurations proper ? 我的配置是否正确? Btw i use Docker for windows, 64bit machine jdk12. 顺便说一句,我使用Docker for Windows,64位计算机jdk12。 I have tried some demo applications and they were working fine. 我已经尝试了一些演示应用程序,但它们运行良好。

The ports mapping in your docker-compose.yml is only relevant for the host, so you'll be able to connect to your DB through localhost:3308 . docker-compose.yml的端口映射仅与主机相关,因此您可以通过localhost:3308连接到数据库。 But inside your other docker-compose containers (that is, the compose default network), you'd have to use workaround-mysql:3306 . 但是,在其他由docker-compose组成的容器(即默认的撰写网络)内部,您必须使用workaround-mysql:3306

You can connect from host to db in docker container, but you cannot connect to db in docker container from other docker container. 您可以从主机连接到docker容器中的db,但不能从其他 docker容器连接到docker容器中的db。

Check mysql settings and allow connections from app container's IP (or docker network). 检查mysql设置并允许来自应用程序容器的IP(或docker网络)的连接。

Ok so the issue was , mysql got stuck on : 好的,问题是,mysql卡在了:

[Entrypoint] Starting MySQL 5.7.26-1.1.11 [Entrypoint]启动MySQL 5.7.26-1.1.11

Nothing could connect to it. 没有任何东西可以连接到它。 Application that needed it was starting up and it could not connect so it was throwing errors. 需要它的应用程序正在启动,无法连接,因此引发错误。

Here is another question of mayne regarding this issue and you can see its solved : Docker MySQL - can't connect from Spring Boot app to MySQL database 这是有关此问题的mayne的另一个问题,您可以看到它已解决: Docker MySQL- 无法从Spring Boot应用连接到MySQL数据库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring Boot + docker-compose + MySQL:连接被拒绝 - Spring Boot + docker-compose + MySQL: Connection refused Spring Boot连接到mysql docker - Spring Boot Connect to mysql docker docker镜像中的spring boot应用程序错误连接到localhost:5433被拒绝 - spring boot app in docker image error Connection to localhost:5433 refused 连接被拒绝:访问在Docker容器中运行的Spring Boot应用程序 - Connection refused: accessing a spring boot application running in docker container java.net.ConnectException:连接被拒绝:用 Spring boot 连接 Solr - java.net.ConnectException: Connection refused: connect Solr with Spring boot java.net.ConnectException:连接被拒绝(连接被拒绝):Docker + Spring 启动 - java.net.ConnectException: Connection refused (Connection refused): Docker + Spring boot Docker:无法连接 Spring 启动和 MYSQL - Docker: can't connect Spring Boot & MYSQL docker容器内的spring boot引发java.net.ConnectException:连接被拒绝(连接被拒绝) - Spring boot inside docker container throws java.net.ConnectException: Connection refused (Connection refused) Docker 组成 Redis 和 Spring 启动应用程序:java.net.ConnectException:连接被拒绝(连接被拒绝)“, - Docker compose Redis and Spring boot app: java.net.ConnectException: Connection refused (Connection refused)", Spring 启动 2 应用程序在 docker-maven-plugin 触发的 docker 容器内运行时无法连接到 mysql - Spring Boot 2 app cannot connect to mysql while run inside docker container triggered by docker-maven-plugin
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM