Penulisan Docker selalu memulai dan menghentikan wadah dalam urutan ketergantungan, atau urutan berurutan dalam file jika tidak diberikan. Tetapi docker-compose tidak menjamin bahwa itu akan menunggu hingga wadah ketergantungan berjalan. Anda dapat merujuk
di sini untuk rincian lebih lanjut. Jadi masalahnya di sini adalah database Anda belum siap ketika spring-mysql
Anda container mencoba mengakses database. Jadi, solusi yang disarankan adalah Anda dapat menggunakan tunggu-untuk-itu.sh
atau skrip serupa untuk membungkus spring-mysql
Anda aplikasi memulai ENTRYPOINT
.
Sebagai contoh jika Anda menggunakan wait-for-it.sh
ENTRYPOINT
. Anda di Dockerfile Anda harus berubah menjadi berikut setelah menyalin skrip di atas ke root proyek Anda:
ENTRYPOINT ["./wait-for-it.sh", "db:3306", "--", "java", "-jar", "app.jar"]
Dan dua hal penting lainnya yang perlu diperhatikan di sini adalah:
- Jangan gunakan tautan yang tidak digunakan lagi Anda harus menggunakan jaringan yang ditentukan pengguna sebagai gantinya. Semua layanan dalam file komposisi buruh pelabuhan akan berada di jaringan yang ditentukan pengguna tunggal jika Anda tidak secara eksplisit mendefinisikan jaringan apa pun. Jadi, Anda hanya perlu menghapus tautan dari file penulisan.
- Anda tidak perlu memublikasikan port untuk wadah buruh pelabuhan jika Anda hanya menggunakannya di dalam jaringan yang ditentukan pengguna.