Pertama, ada masalah di Anda Dockerfile:
RUN service mysql restart && /tmp/setup.sh
Gambar Docker tidak menyimpan proses yang sedang berjalan. Oleh karena itu, RUNperintah Anda dieksekusi hanya selama docker buildfase dan berhenti setelah build selesai. Sebagai gantinya, Anda perlu menentukan perintah ketika wadah mulai menggunakan CMDatau ENTRYPOINTperintah seperti di bawah ini:
CMD mysql start
Kedua, wadah buruh pelabuhan membutuhkan proses (perintah terakhir) untuk tetap berjalan, jika tidak wadah akan keluar / berhenti. Oleh karena itu, service mysql startperintah normal tidak dapat digunakan secara langsung di Dockerfile.
Larutan
Ada tiga cara khas agar proses tetap berjalan:
Ini sering lebih disukai ketika Anda memiliki satu layanan berjalan karena membuat log yang dihasilkan dapat diakses oleh buruh pelabuhan.
Ini hanya berfungsi jika ada skrip seperti mysqld_safe.
Ini yang terbaik jika perintah harus melakukan serangkaian langkah, sekali lagi, /start.shharus tetap berjalan.
Catatan
Untuk pemula supervisordtidak disarankan menggunakan . Jujur saja, itu berlebihan. Jauh lebih baik menggunakan layanan tunggal / perintah tunggal untuk wadah.
BTW: silakan periksa https://registry.hub.docker.com untuk gambar mysql docker yang ada untuk referensi