cari

Rumah  >  Soal Jawab  >  teks badan

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>
P粉156532706P粉156532706483 hari yang lalu695

membalas semua(1)saya akan balas

  • P粉510127741

    P粉5101277412023-08-30 00:12:12

    Nyatakan nama bekas untuk perkhidmatan pangkalan data anda dalam fail karang docker

    db:
        image: mysql:latest
        restart: always
        **container_name: db-container**

    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

    spring.datasource.url=jdbc:mysql://db-container:3306/mydb

    balas
    0
  • Batalbalas