1

I'm sitting now and looking for solution over 6 hours. Please help me. First of all I will try explain my problem. I created MySql database using image (in dcoker), but when I want create another container (Sprig Boot) and connect to the Database I cannot. I tried created only image of MySql and conntect from intellij and everything is correct. Only when I try creat project in container is problem...

My docer-compose

version: '3'
services:
  api:
    build: ./springboot-api-docker
    ports:
    - "9090:9090"
    depends_on:
      - database
  database:
    container_name: 'localhost'
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_USER: user
      MYSQL_DATABASE: animaldb
    ports:
      - "3307:3306"
    restart: always

application properties

server.port = 9090

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3307/animaldb?autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=password

and DocerFile

FROM openjdk:8u201-jdk-alpine3.9
ADD target/springboot-api-docker-0.0.1-SNAPSHOT.jar .
EXPOSE 9090
CMD java -jar springboot-api-docker-0.0.1-SNAPSHOT.jar

It's funny because... first I wantet change name of container "localhost" to another. But when I was changing that I couldn't run Spring Bot Application even from intellij. I created image of MySql in docker and I was trying to conntect in intellij. It was warking but when I want use SpringBoot Application in caontainer then is problem. I didn't find solve for me yet. I will be very thankful for each help.

My errors here.

java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.

And all text from console. Maybe you will find it faster.

Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] api_1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) ~[hibernate-core-5.4.9.Final.jar!/:5.4.9.Final]

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure api_1 | api_1 | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. api_1 |
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_201] api_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_201] api_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_201] api_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_201] api_1 | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.NativeSession.connect(NativeSession.java:144) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:850) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | ... 58 common frames omitted api_1 | Caused by: java.net.ConnectException: Connection refused (Connection refused) api_1 | at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_201] api_1 | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_201] api_1 | at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_201] api_1 | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_201] api_1 | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_201] api_1 | at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_201] api_1 | at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | ... 60 common frames omitted

3
  • What errors are you getting and what environment (mac/windows/linux) are you running? Commented Jan 8, 2020 at 1:29
  • I edited again the post. I can't creat a conneaction with mysql. I use Windows. Commented Jan 8, 2020 at 1:50
  • @Andrii have you found the solution for your problem? Commented Jun 11, 2021 at 21:58

2 Answers 2

1

It's not good to use localhost as you docker container name.

Change localhost to database like it.

localhost is always your local machine or a local docker, not external resource.

docker-compose

version: '3'
services:
  api:
    build: ./springboot-api-docker
    ports:
    - "9090:9090"
    depends_on:
      - database
    links:
      - database
  database:
    container_name: 'database'
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_USER: user
      MYSQL_DATABASE: animaldb
    ports:
      - "3307:3306"
    restart: always

application.properties:

server.port = 9090

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://database: 3306/animaldb?autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=password
Sign up to request clarification or add additional context in comments.

2 Comments

I know but It does't work still. The name doesn't cause the error.
You are using external port 3307, try to use 3306 in spring.datasource.url.
0

I know it's late after 2 years, but you should create network first and add two containers to the network.

docker network create network name

docker run yourcontainter --net network name

1 Comment

all the containers that run in a docker-compose file will be in the same network unless you config otherwise

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.