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:
-Application | -Frontend (belum dilaksanakan dalam docker) -Backend(springAPI) | -dockerfile -Python (flaskAPI) (belum dilaksanakan dalam docker) docker-compose.yml
docker-compose.yml kelihatan seperti ini:
versi: '3.9' perkhidmatan: db: imej: mysql:terkini mulakan semula: sentiasa persekitaran: MYSQL_ROOT_PASSWORD:MYSQL_DATABASE: mydb MYSQL_USER: MYSQL_PASSWORD: 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:
Fail docker springapi adalah seperti berikut:
# 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"]
Ini boleh terdiri daripada bekas docker dan run. Bagaimanakah boot spring java membuang ralat dan ditutup.Ralatnya ialah:
`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.`
Saya cuba mengkonfigurasi semula aplikasi saya.tetapan seperti ini:
spring.datasource.url=jdbc:mysql://localhost:8888/mydb spring.datasource.username=spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
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.)
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?
Edit perkara yang telah saya cuba setakat ini
db: imej: mysql:terkini mulakan semula: sentiasa nama_bekas: sql-db
Kemudian tukar aplikasi.tetapan:
spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (dan juga dengan sql-db:3306);
Tetapi ini masih memberikan ralat yang sama.
Nyatakan nama bekas untuk perkhidmatan pangkalan data anda dalam fail karang docker
Kemudian dalam url jdbc anda, anda harus merujuk nama bekas pangkalan data yang dikonfigurasikan dan port konfigurasi sebenar bekas pangkalan data.
Jadi datasource.url anda kelihatan seperti