yonetmen
By:
yonetmen

Using MySQL with Spring boot docker image

January 26, 2017 1.9k views
MySQL Docker Java Ubuntu

I have this problem that I can't really find a solution. It can be a silly question for most of you but I hope someone offers a little help to this newbie :)

I have 1GB droplet and I installed mysql using this page. I logged in mysql console, imported my database, created a new user with required permissions. Its all good until this point.

I have pulled my docker image from docker hub with this line:

docker run --rm -p 80:80 my-username/image-name

It downloaded for the first time and started my Spring boot application but I got this exception every time I try to run my image.

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.
....
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

my application.yaml file looks like this:

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp
  datasource:
    url: jdbc:mysql://localhost:3306/db-name
    username: my-username
    password: secret-pwd
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
      dialect: org.hibernate.dialect.MySQLInnoDBDialect
    generate-ddl: true

MySQL server is up and running. What am I missing here?

2 Answers

Issue docker ps to see the name of the running mysql container, it's the last column of this output. I will assume soberb_mysql (I presume you're running mysql in a container).

Then when you run the main container with your application, use --link=soberb_mysql parameter (the name of the mysql container), or --link=[HEXADECIMAL ID OF CONTAINER]:

docker run --rm -p 80:80 --link=soberb_mysql my-username/image-name

https://docs.docker.com/engine/userguide/networking/default_network/container-communication/

Have another answer? Share your knowledge.