Ссылка на сервер MySQL внутри контейнера docker из приложения Java внутри другого контейнера - PullRequest
1 голос
/ 16 апреля 2020

Я относительно новичок в Docker и пытаюсь развернуть приложение Java Springboot в контейнере, а сервер MySQL - в другом контейнере, после чего разрешить соединение между обоими контейнерами.

Приложение Java использует java.sql.DriverManager для связи с экземпляром сервера MySQL, локально размещенного на моей машине в docker контейнере , приложение правильно подключается к серверу MySQL однако при выполнении вне docker контейнера , однако, когда я пытаюсь выполнить docker контейнер моего Java приложения, я получаю эту ошибку Communications link failure java.net.ConnectException: Connection refused.

Я пытался изменить URI соединений от jdbc:mysql://127.0.0.1:3306/online_store на jdbc:mysql://mysql-container:3306/online_store (Примечание: mysql -container - это имя моего docker контейнера, на котором размещен MySQL сервер), затем перестроил образ docker и запустил контейнер, и приложение успешно смогло подключиться к MySQL серверу , это должно было произойти? если это так, я хотел бы знать, почему для запуска одного и того же приложения Java в разных средах (в качестве этих сред используются моя ОС и контейнер docker) требуется изменение URI MySQL, хотя приложение в обеих средах связь с тем же MySQL экземпляром сервера.

инициализация соединения с MySQL сервером:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DatabaseConnection {
    private static Connection connection;

    public static Connection getInstance(){
        if(connection == null){
            try{
                Class.forName("com.mysql.cj.jdbc.Driver");
                connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/online_store", "root", "1234"); // this only works correctly if the application is being executed outside of a Docker container
            }
            catch (Exception e){e.printStackTrace();}
        }
        return connection;
    }
}

Dockerfile:

FROM openjdk:11
ADD out/artifacts/online_store_api_jar/online-store-api.jar online-store-api.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "online-store-api.jar"]

Редактировать: Здесь как настроить Docker создание контейнера и связь через Windows power shell.

>docker pull mysql:5.7
>docker run --name mysql-container -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7
>docker build . -t online-store-image 
>docker run -p 8080:8080 --name online-store-container --link mysql-container:mysql -d online-store-image 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...