Reputation: 21
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
Upvotes: 1
Views: 1364
Reputation: 1
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
Upvotes: 0
Reputation: 537
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
Upvotes: 1