Я относительно новичок в 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