aplikasi springboot tidak boleh mewujudkan sambungan dengan pangkalan data sql yang berjalan pada docker
<p>Saya mempunyai projek yang dijalankan dalam localhost menggunakan intellij sebagai contoh Springboot, menggunakan SQL Xampp tanpa sebarang masalah. Ini berfungsi dengan baik. Tetapi sekarang saya mahu menggunakan segala-galanya untuk buruh pelabuhan. Jadi saya mencipta fail docker dan fail docker-compose dalam direktori saya seperti ini: </p>
<pre class="brush:php;toolbar:false;">-Application
|
-Frontend (belum dilaksanakan dalam docker)
-Backend(springAPI)
|
-dockerfile
-Python (flaskAPI) (belum dilaksanakan dalam docker)
docker-compose.yml</pre>
<p>docker-compose.yml kelihatan seperti ini: </p>
<pre class="brush:php;toolbar:false;">versi: '3.9'
perkhidmatan:
db:
imej: mysql:terkini
mulakan semula: sentiasa
persekitaran:
MYSQL_ROOT_PASSWORD: <lulus>
MYSQL_DATABASE: mydb
MYSQL_USER: <pengguna>
MYSQL_PASSWORD: <lulus>
pelabuhan:
- "3306:3306"
jilid:
- ./data:/var/lib/mysql
phpmyadmin:
imej: phpmyadmin/phpmyadmin:terkini
mulakan semula: sentiasa
bergantung kepada:
-db
pelabuhan:
- "8888:80"
persekitaran:
PMA_HOST:db
MYSQL_ROOT_PASSWORD: contoh
spring-api:
imej: spring-api:terkini
pelabuhan:
- "8080:8080"
bergantung kepada:
-db
jilid:
dbdata:
mysql-data:</pre>
<p>Fail docker springapi adalah seperti berikut:</p>
<pre class="brush:php;toolbar:false;"># Gunakan masa jalan OpenJDK rasmi sebagai imej induk
DARI openjdk:17-jdk-slim
# Tetapkan direktori kerja kepada /app
WORKDIR/apl
# Salin fail balang aplikasi ke bekas
SALIN build/libs/backendAPI.jar backendAPI.jar
# Jalankan aplikasi
CMD ["java", "-jar", "backendAPI.jar"]</pre>
<p>Ini boleh terdiri daripada bekas docker dan run. Bagaimanakah boot spring java membuang ralat dan ditutup.Ralatnya ialah: </p>
<pre class="brush:php;toolbar:false;">`2023-03-06T12:25:37.603Z INFO 1 --- [utama] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Bermula. ..
2023-03-06T12:25:38.685Z RALAT 1 --- [utama] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pengecualian semasa permulaan kumpulan.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Kegagalan pautan komunikasi
Paket terakhir yang berjaya dihantar ke pelayan ialah 0 milisaat yang lalu Pemandu belum menerima sebarang paket daripada pelayan.`</pre>
<p>Saya cuba mengkonfigurasi semula aplikasi saya.tetapan seperti ini: </p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://localhost:8888/mydb
spring.datasource.username=<nama pengguna>
spring.datasource.password=<kata laluan>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver</pre>
<p>Tetapi ia tiada kesan. Kerana ia terus melemparkan ralat yang sama. Pelayan SQL boleh diakses melalui url yang diberikan. Jadi berjalan dengan baik (kecuali tidak mempunyai hak pentadbir, tetapi itu isu yang berbeza.) </p>
<p>Persediaan ini, dengan beberapa tweak pada application.settings, berfungsi dengan baik apabila saya hanya menggunakan Xammp dan intellij. Tetapi sekarang saya tidak dapat menyambungkannya. Apa yang saya hilang di sini? </p>
<p><strong>Edit perkara yang telah saya cuba setakat ini</strong></p>
<pre class="brush:php;toolbar:false;">db:
imej: mysql:terkini
mulakan semula: sentiasa
nama_bekas: sql-db</pre>
<p>Kemudian tukar aplikasi.tetapan: </p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (dan juga dengan sql-db:3306)</pre> ;
<p>Tetapi ini masih memberikan ralat yang sama. </p>