Pertama, ada masalah di Anda Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
Gambar Docker tidak menyimpan proses yang sedang berjalan. Oleh karena itu, RUN
perintah Anda dieksekusi hanya selama docker build
fase dan berhenti setelah build selesai. Sebagai gantinya, Anda perlu menentukan perintah ketika wadah mulai menggunakan CMD
atau ENTRYPOINT
perintah 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 start
perintah 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.sh
harus tetap berjalan.
Catatan
Untuk pemula supervisord
tidak 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