Unable to acquire JDBC Connection on integration test when using Docker bridge network Unable to acquire JDBC Connection on integration test when using Docker bridge network docker docker

Unable to acquire JDBC Connection on integration test when using Docker bridge network


you should bind docker container mysql port to a port in VM.

This is well explained in the below thread.

Worth trying...
How to connect with MySQL DB running as container in docker?


Thanks to @rohit-thomas. We narrow down the question to something related to the host of the URL.
The simple answer is changing the host of the JDBC URL in the spring boot application.properties to the docker host IP address. From
spring.datasource.url=jdbc:mysql://mysql:3306/database?
to
spring.datasource.url=jdbc:mysql://172.17.0.1:3306/database?

From inside of a Docker container, how do I connect to the localhost of the machine?
This post also helps as the final solution.

ip addr show docker04: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default            ...       inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       ...

My conclusion is:
The Jenkins container builds from an image is able to communicate with the MySQL container with its container name or private address on docker bridge network. However, as the application built by the Jenkins is not able to do that.Since the MySQL container port has bound to the host machine, the application could communicate with MySQL container through the host port.

If the conclusion is wrong, comments are welcome.


Some things you can check that might help you resolve this issue.

  • In application.properties try to use docker host IP address.

    from

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

    to

    spring.datasource.url = jdbc:mysql://192.168.99.100:33060/DATABASE_URI_PATH

    Note: You will need to map your IP and port when you do docker run or ports in docker file.And use the same docker network among your containers.

  • Verify if you server app can reach your mysql or vice versa. Go inside the docker container and try to ping.