도커 컨테이너 내에서 호스트 시스템의 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 이미지와 사용방법이 있습니다.기존 데이터베이스를 이미지에 덤프할 수 있습니다(따라서 모든 작업을 다시 수행할 필요가 없습니다).
그러기 위해서는 다음 작업을 수행해야 합니다.
- 새 데이터베이스 이미지 생성(데이터베이스 덤프)
- 데이터베이스 컨테이너 실행(설정 이름!)
- 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
'itsource' 카테고리의 다른 글
특수한 포인터onCreate()의 뷰에 액세스하는 예외 (0) | 2022.11.26 |
---|---|
도커 컨테이너 내에 PHP Composer를 설치하는 방법 (0) | 2022.11.26 |
요소는 (…의 경우) 루프에서 정렬됩니다. (0) | 2022.11.26 |
Symfony 2에서 요청 매개 변수를 얻는 방법은 무엇입니까? (0) | 2022.11.26 |
파이어베이스 콜백 내에서 vuejs 'this'에 액세스할 수 없는 이유는 무엇입니까? (0) | 2022.11.24 |