Daria Pydorenko
Daria Pydorenko

Reputation: 1802

Can't connect to MySQL with Spring in Docker

I have mysql running in a docker container:

docker run -it --name mysql-db -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=db -e MYSQL_USER=root -e MYSQL_PASSWORD=root mysql:latest
docker start mysql-db

I want to run my Spring Boot application (with Maven) in another docker container:

docker build -t java-app .
docker run -it --name java-app --link mysql-db:mysql -p 8080:8080 java-app
docker start java-app

But I get an exception:

Caused by: java.net.ConnectException: Connection refused (Connection refused)

My Dockerfile:

FROM java:8
ADD target/demo-0.0.1-SNAPSHOT.jar /usr/share/demo/demo.jar 
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/demo/demo.jar"]  

My application.yml:

spring:
    # General JPA properties
    jpa:
        show-sql: false
        database-platform: org.hibernate.dialect.MySQL57Dialect
        # Hibernate Specific properties
        hibernate:
            ddl-auto: create
        properties:
            hibernate:
                format_sql: false
    # DataSource configuration
    datasource:
        url: jdbc:mysql://mysql:3306/db
        username: root
        password: root

What is my problem?

MySQL logs have warnings about -skip-name-resolve mode.

Upvotes: 0

Views: 2662

Answers (1)

odk
odk

Reputation: 2252

Looks like your database isn't working at all. You can verify this by running docker ps or docker exec -it mysql-db mysql -u root -proot db in 2nd terminal. It will probably fail. Reason to this is -e MYSQL_USER=root flag you use. This docker image creates root user with password you've provided so when you want to create root user again it fails and shuts down container. Just change it to -e MYSQL_USER=myuser and it should work.

Upvotes: 1

Related Questions