springboot 애플리케이션이 docker에서 실행 중인 SQL 데이터베이스와 연결을 설정할 수 없습니다.
P粉156532706
2023-08-29 09:43:41
<p>intellij를 Springboot 인스턴스로 사용하고 Xampp의 SQL을 문제 없이 사용하여 localhost에서 실행 중인 프로젝트가 있습니다. 이것은 매우 잘 작동합니다. 하지만 이제는 모든 것을 docker에 배포하고 싶습니다. 그래서 다음과 같이 내 디렉토리에 dockerfile과 docker-compose up 파일을 만들었습니다. </p>
<pre class="brush:php;toolbar:false;">-응용 프로그램
|
-프런트엔드(아직 docker에 구현되지 않음)
-백엔드(springAPI)
|
-dockerfile
-Python(flaskAPI)(아직 docker에 구현되지 않음)
docker-compose.yml</pre>
<p>docker-compose.yml은 다음과 같습니다. </p>
<pre class="brush:php;toolbar:false;">버전: '3.9'
서비스:
DB:
이미지: mysql:최신
다시 시작: 항상
환경:
MYSQL_ROOT_PASSWORD: <pass>
MYSQL_DATABASE:mydb
MYSQL_USER: <사용자>
MYSQL_PASSWORD: <pass>
포트:
- "3306:3306"
볼륨:
- ./data:/var/lib/mysql
phpmyadmin:
이미지: phpmyadmin/phpmyadmin:최신
다시 시작: 항상
의존:
-db
포트:
- "8888:80"
환경:
PMA_HOST:db
MYSQL_ROOT_PASSWORD: 예
스프링 API:
이미지: spring-api:최신
포트:
- "8080:8080"
의존:
-db
볼륨:
DB데이터:
mysql-데이터:</pre>
<p>springapi의 dockerfile은 다음과 같습니다.</p>
<pre class="brush:php;toolbar:false;"># 공식 OpenJDK 런타임을 상위 이미지로 사용
openjdk:17-jdk-slim에서
# 작업 디렉터리를 /app으로 설정합니다.
WORKDIR/앱
# 애플리케이션 jar 파일을 컨테이너에 복사합니다.
복사 빌드/libs/backendAPI.jar backendAPI.jar
# 애플리케이션을 실행한다
CMD ["java", "-jar", "backendAPI.jar"]</pre>
<p>이것은 docker 및 run 컨테이너로 구성될 수 있습니다. Java Spring Boot는 어떻게 오류를 발생시키고 종료합니까?오류는 다음과 같습니다. </p>
<pre class="brush:php;toolbar:false;">`2023-03-06T12:25:37.603Z INFO 1 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - 시작 중입니다. ..
2023-03-06T12:25:38.685Z 오류 1 --- [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - 풀 초기화 중 예외가 발생했습니다.
com.mysql.cj.jdbc.Exceptions.CommunicationsException: 통신 링크 실패
서버에 성공적으로 전송된 마지막 패킷은 0밀리초 전입니다. 드라이버가 서버로부터 어떤 패킷도 수신하지 못했습니다.'</pre>
<p>다음과 같이 application.settings를 재구성해 보았습니다.</p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://localhost:8888/mydb
spring.datasource.username=<theusername>
spring.datasource.password=<thepassword>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver</pre>
<p>그러나 아무런 효과가 없습니다. 계속 같은 오류가 발생하기 때문입니다. SQL 서버는 주어진 URL을 통해 접근할 수 있습니다. 따라서 잘 실행됩니다(관리자 권한이 없는 것을 제외하고는 다른 문제입니다.) </p>
<p>application.settings를 약간 수정한 이 설정은 Xammp와 intellij를 사용할 때 매우 효과적입니다. 그런데 지금은 연결할 수가 없어요. 내가 여기서 무엇을 놓치고 있는 걸까요? </p>
<p><strong>지금까지 시도한 내용 편집</strong></p>
<pre class="brush:php;toolbar:false;">db:
이미지: mysql:최신
다시 시작: 항상
컨테이너_이름: sql-db</pre>
<p>그런 다음 application.settings를 변경하세요: </p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (또한 sql-db:3306 포함)</pre> ;
<p>하지만 여전히 같은 오류가 발생합니다. </p>
Docker Compose 파일에서 데이터베이스 서비스의 컨테이너 이름을 지정하세요
으아악그런 다음 jdbc URL에서 구성된 데이터베이스 컨테이너 이름과 데이터베이스 컨테이너의 실제 구성된 포트를 참조해야 합니다.
datasource.url은 다음과 같습니다.
으아악