Existe alguma maneira de definir um horário 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 software sensível ao tempo (o comportamento depende da data).
Outros casos de uso comuns:
- executando software legado com erros do y2k
- software de teste para conformidade com o ano 2038
- depuração de problemas relacionados ao tempo, como certificados SSL expirados
- executando um software que deixa de ser executado fora de um determinado período de tempo
- processos determinísticos de construção.
Respostas:
É possível
A solução é falsificá-lo no contêiner. Essa 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 você deseja aplicar o tempo falso.Exemplo:
Agora você pode alterar dinamicamente o horário dos servidores:
Exemplo:
fonte
Jenny D está correta, pois, por padrão, o contêiner do Docker não permite o acesso ao relógio do sistema.
No entanto, no Linux, se você estiver bem com seu contêiner tendo acesso a esse recurso, poderá permitir esse recurso usando a opção "--cap-add = SYS_TIME" do comando "docker run" ao criar seu contêiner:
Em seguida, você pode alterar a hora de dentro do contêiner em execução:
Documentação de referência: https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
fonte
Inicie o contêiner com uma variável de ambiente adicional:
fonte
solução docker-compose:
Adicione
/etc/localtime:/etc/localtime:ro
aovolumes
atributoVeja este link para um exemplo.
fonte