Apakah ada cara untuk mengatur waktu sistem wadah Docker secara dinamis (saat berjalan) tanpa mempengaruhi mesin host?
Menggunakan
hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"
memberikan kesalahan berikut:
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.
Menggunakan
date -s "2 OCT 2006 18:00:00"
memberikan kesalahan berikut:
date: cannot set date: Operation not permitted
Gunakan kasus:
Saya perlu menguji perangkat lunak yang sensitif waktu (perilaku tergantung pada tanggal).
Kasus penggunaan umum lainnya:
- menjalankan perangkat lunak lama dengan bug y2k
- perangkat lunak pengujian untuk kepatuhan tahun-2038
- men-debug masalah terkait waktu, seperti sertifikat SSL yang kadaluwarsa
- menjalankan perangkat lunak yang berhenti berjalan di luar jangka waktu tertentu
- proses membangun deterministik.
Jawaban:
Itu mungkin
Solusinya adalah memalsukannya di wadah. Lib ini memotong semua program panggilan sistem yang digunakan untuk mengambil waktu dan tanggal saat ini.
Implementasinya mudah. Tambahkan fungsionalitas ke Dockerfile Anda yang sesuai:
Ingatlah untuk mengatur variabel lingkungan
LD_PRELOAD
sebelum Anda menjalankan aplikasi yang Anda inginkan waktu palsunya diterapkan.Contoh:
Anda sekarang dapat secara dinamis mengubah waktu server:
Contoh:
sumber
Jenny D benar karena secara default wadah Docker tidak mengizinkan akses ke jam sistem.
Namun, di Linux, jika Anda setuju dengan container Anda yang memiliki akses ke kapabilitas ini, Anda dapat mengizinkan kapabilitas ini menggunakan opsi "--cap-add = SYS_TIME" dari perintah "docker run" saat membuat Anda container:
Kemudian, Anda dapat mengubah waktu dari dalam wadah yang sedang berjalan:
Dokumentasi referensi: https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
sumber
Mulai wadah dengan variabel lingkungan tambahan:
sumber
solusi docker-compose:
Tambahkan
/etc/localtime:/etc/localtime:ro
kevolumes
atribut.Lihatlah tautan ini sebagai contoh.
sumber