itsource

도커 컨테이너 내에서 호스트 시스템의 MySQL 데이터베이스 액세스

mycopycode 2022. 11. 26. 13:59
반응형

도커 컨테이너 내에서 호스트 시스템의 MySQL 데이터베이스 액세스

도커스 컨테이너 내에서 스프링 부트 애플리케이션을 실행하고 있다.애플리케이션은 http://localhost:8080/endpoint를 사용하여 호스트 시스템에서 호출할 수 있는 REST 엔드포인트를 제공합니다.이전에는 이 어플리케이션이 도커스가 아닌 호스트 머신에서 실행되었을 때 어플리케이션 내에서 jdbc:mariadb://localhost:3308/fi?user=userName&password=the Password를 사용하여 로컬 MariaDB를 호출할 수 있었습니다.애플리케이션이 도커 내부에서 실행 중이기 때문에 연결에서 "주소=(host=localhost)(port=3308)(type=master)에 연결할 수 없음: 연결이 거부됨(연결 거부됨)" 오류가 반환됩니다.

접속을 확립하는 코드 스니펫은 다음과 같습니다.

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3308/fi?user=username&password=thePassword");
        Statement stmt = connection.createStatement();
        String query = "";
        ResultSet rs = stmt.executeQuery("SELECT * ....;");

호스트 머신으로부터의 REST 콜을 받아들이기 위해서 8080 포토를 이미 공개하고 있습니다.또, 3308 포토를 공개하거나 공개해, 데이타베이스 콜을 발신하려고 하고 있습니다만, 어느쪽도 서포트하지 않습니다.

잘 부탁드립니다!

데이터베이스를 도커와 함께 사용하는 권장 방법은 별도의 컨테이너에서 실행하는 것입니다.도커 컨테이너는 같은(도커) 네트워크에 있기 때문에 링크만 하면 됩니다.여기 MariaDB 이미지와 사용방법이 있습니다.기존 데이터베이스를 이미지에 덤프할 수 있습니다(따라서 모든 작업을 다시 수행할 필요가 없습니다).

그러기 위해서는 다음 작업을 수행해야 합니다.

  1. 새 데이터베이스 이미지 생성(데이터베이스 덤프)
  2. 데이터베이스 컨테이너 실행(설정 이름!)
  3. link do 데이터베이스 컨테이너를 사용하여 REST 컨테이너 실행

개발만 수행하려는 경우 컨테이너를 링크하거나 도커 컴포지트를 사용할 수 있습니다.그러나 컨테이너 내의 데이터베이스는 실제 가동용이 아닙니다.

컨테이너에서 도커 호스트 IP를 검색할 수 있습니다.ip route show

# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  proto kernel  scope link  src 172.17.0.2

디폴트 루트는 호스트 IP(여기서 172.17.0.1)입니다.

이 시점에서 연결을 차단할 수 있는 호스트의 방화벽에 주의하십시오.

엔트리 포인트스크립트에서는, 다음의 방법으로 호스트 IP 를 취득할 수 있습니다.ip route show | awk '/default/ {print $3}'그런 다음 이 IP를 환경변수를 통해 전달하고 응용 프로그램에서 가져올 수 있습니다.

언급URL : https://stackoverflow.com/questions/44788120/accessing-mysql-database-on-host-machine-from-within-dockers-container

반응형