skip to Main Content

I’ve got following two containers:

mysqldocker run -d -e MYSQL_ROOT_PASSWORD=secretpassword -p 3306:3306 --restart=unless-stopped -v /var/lib/mysql:/var/lib/mysql --name mysql mysql:8.0.29

and springapp with a Spring Boot app which tries to connect to it:

spring.datasource.url=jdbc:mysql://<HOST_IP_ADDRESS>:3306/databaseschema

This ends up in with an error message:

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

I am able to connect to MySQL using MySQL Workbench from my PC without any issues. I was able to fix this connection issue in two ways:

  • adding both containers to the same network and using mysql container name
  • adding spring app to the host network

My question is: Why is the connection not possible? I thought if I can connect to the mysql instance from the "external" world, than it should be also possible from the container. Does someway differentiate if the port is managed by Docker container and then access is restricted for other containers?

2

Answers


  1. You can try usign the name of the container, for example:

    spring.datasource.url=jdbc:mysql://mysql:3306/databaseschema
    

    If it doen’t work try usign the same network for both containers

    Login or Signup to reply.
  2. By using -p 3306:3306 with your MySQL container you’ve exposed port 3306 to your host machine which then, in turn, exposes it to other machines on its network (effectively). It doesn’t expose it to other containers running on the same machine because containers are meant to be isolated.

    Of course you can effectively disable this behaviour by running your spring app container with --network=host.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search