Existe alguma maneira de definir a hora do sistema de contêineres do Docker dinamicamente (em tempo de execução) sem afetar a máquina host?
Usando
hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"
dá o seguinte erro:
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.
Usando
date -s "2 OCT 2006 18:00:00"
dá o seguinte erro:
date: cannot set date: Operation not permitted
Caso de uso:
Preciso testar um software sensível ao tempo (o comportamento depende da data).
Outros casos de uso comuns:
- executando software legado com bugs do ano 2000
- software de teste para conformidade com o ano de 2038
- depuração de problemas relacionados ao tempo, como certificados SSL expirados
- software em execução que deixa de ser executado fora de um determinado período de tempo
- processos de construção determinísticos.
É possível
A solução é falsificá-lo no recipiente. Esta lib intercepta todos os programas de chamada do sistema usados para recuperar a hora e a data atuais.
A implementação é fácil. Adicione funcionalidade ao seu Dockerfile conforme apropriado:
Lembre-se de definir as variáveis de ambiente
LD_PRELOAD
antes de executar o aplicativo ao qual deseja aplicar o tempo falsificado.Exemplo:
Agora você pode alterar dinamicamente o horário dos servidores:
Exemplo:
Aqui está a
docker-compose
solução:Adicione
/etc/localtime:/etc/localtime:ro
aovolumes
atributo.Verifique este link para obter um exemplo.
Inicie o contêiner com uma variável de ambiente adicional: