programing

다른 도커에서 도커 내의 MariaDB에 액세스

yoursource 2022. 9. 16. 21:17
반응형

다른 도커에서 도커 내의 MariaDB에 액세스

도커 컨테이너가 두 개 있습니다.하나는 표준 MariaDB 이미지를 기반으로 합니다.컨테이너의 이름은 "mariadb"이며, 그 안에 "fi"라고 불리는 데이터베이스가 있습니다.fi db는 내부에 몇 개의 테이블이 있으며, 각 테이블에는 몇 개의 데이터 행이 있습니다.DataGrip 또는 기타 데이터베이스 보기 소프트웨어를 사용하여 포트 3306을 사용하여 로컬호스트에서 데이터베이스를 호출하여 정상적으로 액세스하고 쿼리할 수 있습니다.

두 번째 Docker 컨테이너에서는 Spring Boot 응용 프로그램을 실행하고 있으며, 이 응용 프로그램은 MariaDB의 데이터에 액세스해야 합니다.도커에서 MariaDB를 실행하고 호스트 시스템에서 Spring Boot 애플리케이션을 실행하는 경우 연결 문자열 "jdbc:mariadb://localhost:3306/?user=myUsername&password=myPassword"를 사용하여 도커에서 MariaDB에 액세스할 수 있습니다.문제는 둘 다 다른 도커에서 실행하려고 하면 스프링 부트애플리케이션이 데이터베이스에 액세스 할 수 없다는 것입니다.도커 2개를 링크해 달라고 하는 사람도 많이 있습니다만, 이것으로는 문제가 해결되지 않는 것 같습니다.스프링 부트 도커를 실행할 때 "docker run -i -p 8080:8080 --link mariadb:db javaImage /bin/bash" 명령을 실행합니다.이 문제와 무관한 이유로 8080 포트를 공개합니다.제가 이해한 바로는 스프링 부트 도커 내의 환경변수가 되어 키워드 "db"를 사용하여 접근할 수 있습니다.이러한 변수는 MariaDB 도커의 실제 IP인 환경변수로 대체됩니다.

현시점에서는 접속을 확립하고 있는 Java 코드에서 접속 문자열 "jdbc:mariadb://db:3306/fi?user=myUsername&password=myPassword"를 사용하고 있습니다.그러면 "Could not connect: (연결할 수 없습니다)" 오류가 반환됩니다.알 수 없는 데이터베이스 'fi'입니다. 이 연결이 MariaDB 도커에 실제로 연결되어 있다면 fi 데이터베이스를 찾을 수 있습니다.

어떤 도움이라도 감사합니다.감사합니다!

편집: 코드 조각

        Connection connection = DriverManager.getConnection("jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword");
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM ...;");

위와 같이 접속 문자열을 다음과 같이 변경.이제 "run -i -p 8080:8080 --link mariadb javaImage /bin/bash" 명령을 사용하여 컨테이너를 실행합니다.같은 결과, 접속을 시도했을 때 이 에러가 표시됩니다.Could not connect:알 수 없는 데이터베이스 'fi'입니다.

컨테이너의 이름이 mariadb일 경우 db가 아닌 URL에서 사용해야 합니다.

jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword

링크에서도 mariadb를 사용해야 합니다.

docker run -i -p 8080:8080 --link mariadb javaImage /bin/bash

언급URL : https://stackoverflow.com/questions/44805243/accessing-a-mariadb-in-one-docker-from-another-docker

반응형