Czy jest jakiś sposób na dynamiczne ustawienie czasu systemowego kontenerów Docker (w czasie wykonywania) bez wpływu na maszynę hosta?
Za pomocą
hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"
daje następujący błąd:
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.
Za pomocą
date -s "2 OCT 2006 18:00:00"
daje następujący błąd:
date: cannot set date: Operation not permitted
Przypadek użycia:
Muszę przetestować oprogramowanie wrażliwe na czas (zachowanie zależy od daty).
Inne typowe przypadki użycia:
- działające starsze oprogramowanie z błędami y2k
- testowanie oprogramowania pod kątem zgodności z rokiem 2038
- debugowanie problemów związanych z czasem, takich jak wygasłe certyfikaty SSL
- uruchomione oprogramowanie, które przestaje działać poza określonym czasem
- deterministyczne procesy budowania.
Odpowiedzi:
To jest możliwe
Rozwiązaniem jest sfałszowanie go w pojemniku. Ta biblioteka przechwytuje wszystkie programy wywołań systemowych używane do pobierania bieżącej godziny i daty.
Wdrożenie jest łatwe. Dodaj funkcjonalność do pliku Docker odpowiednio:
Pamiętaj, aby ustawić zmienne środowiskowe
LD_PRELOAD
przed uruchomieniem aplikacji, której dotyczy fałszywy czas.Przykład:
Możesz teraz dynamicznie zmieniać czas serwerów:
Przykład:
źródło
Jenny D ma rację, ponieważ domyślnie kontener Docker nie pozwala na dostęp do zegara systemowego.
Jednak w systemie Linux, jeśli twój kontener ma dostęp do tej możliwości, możesz na to pozwolić, używając opcji „--cap-add = SYS_TIME” komendy „runer run” podczas tworzenia kontenera:
Następnie możesz zmienić czas z działającego kontenera:
Dokumentacja referencyjna: https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
źródło
Uruchom kontener z dodatkową zmienną środowiskową:
źródło
rozwiązanie dokowania-komponowania:
Dodaj
/etc/localtime:/etc/localtime:ro
dovolumes
atrybutu.Spójrz na ten link jako przykład.
źródło