Saya menerapkan aplikasi pihak ke-3 sesuai dengan 12 faktor penasehat, dan salah satu poin mengatakan bahwa log aplikasi harus dicetak ke stdout/stderr: kemudian perangkat lunak pengelompokan dapat mengumpulkannya.
Namun, aplikasi hanya dapat menulis ke file atau syslog. Bagaimana cara mencetak log ini?
Dengan cara ini, kita mengkonfigurasi aplikasi sehingga log ke file, dan terus menerus tail -f itu. Untungnya, tail dapat menerima --pid PID: ini akan keluar ketika proses yang ditentukan keluar. Kami menempatkan $$ ada: PID dari shell saat ini.
Sebagai langkah terakhir, aplikasi yang diluncurkan adalah exec'ed, yang berarti bahwa shell saat ini sepenuhnya diganti dengan aplikasi itu.
Catatan: dengan menggunakan tail -F kami Daftar nama file, dan akan membacanya bahkan jika mereka muncul kemudian!
Akhirnya, Dockerfile minimalis:
FROM ubuntuADD run.sh /root/run.shCMD ['/root/run.sh']
Catatan: untuk workaroung beberapa sangat aneh tail -f perilaku (yang mengatakan "telah diganti dengan file jarak jauh. menyerah pada nama ini") saya mencoba pendekatan lain: semua file log yang diketahui dibuat & terpotong saat start up: dengan cara ini saya memastikan mereka ada, dan baru kemudian -- ekor mereka:
Saya baru saja menyelesaikan masalah ini dengan apache2, dan bergumul dengan menggunakan CustomLog untuk mencoba mengarahkan ulang ke /proc/1/fd/1 tapi tidak bisa mendapatkan yang bekerja. Dalam implementasi saya, apache tidak berjalan sebagai pid 1, jadi jawaban kolypto tidak bekerja seperti apa adanya. Pendekatan Pieter tampak menarik, jadi saya menggabungkan keduanya dan hasilnya bekerja dengan sangat baik:
Secara teknis ini membuat apache access.log dan error.log pergi ke stdout dan stderr sejauh menyangkut Kolektor log buruh pelabuhan, tetapi akan sangat bagus jika ada cara untuk memisahkan keduanya di luar wadah, seperti saklar untuk docker logs itu hanya akan menunjukkan satu atau yang lain...
@ MichaelHampton, tampaknya baik-baik saja, tetapi Docker menjalankan satu proses yang dapat menulis ke stdout, dan ini terdengar seperti menggabungkan dua di antaranya?