Onde os contêineres do Docker obtêm suas informações de tempo? Eu criei alguns contêineres a partir da imagem básica do ubuntu:trusty e, quando executo e solicito 'date', recebo a hora UTC.
Por um tempo eu contornei isso fazendo o seguinte no meu Dockerfile:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
No entanto, por algum motivo, parou de funcionar. Pesquisando on-line, vi o abaixo sugerido:
docker run -v /etc/timezone:/etc/timezone [image-name]
Ambos os métodos definem corretamente o fuso horário!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
Alguém sabe o que dá?
O segredo aqui é que
dpkg-reconfigure tzdata
simplesmente cria/etc/localtime
como uma cópia, hardlink ou symlink (um symlink é preferível) para um arquivo em/usr/share/zoneinfo
. Portanto, é possível fazer isso inteiramente a partir do seu Dockerfile. Considerar:E como bônus, o TZ também será definido corretamente no contêiner.
Isso também é independente de distribuição, então funciona com praticamente qualquer Linux.
Nota: se você estiver usando uma imagem baseada em alpine, precisará instalar a
tzdata
primeira. (veja esta questão aqui )Se parece com isso:
Normalmente, é suficiente definir uma variável de ambiente no contêiner docker, assim:
Claro que isso também funcionaria com
docker-compose
.Você pode adicionar seus arquivos locais (/etc/timezone e /etc/localtime) como volume em seu docker-container.
Atualize seu
docker-compose.yml
com as seguintes linhas.Agora o tempo do container é o mesmo do seu host
A montagem
/etc/localtime
na imagem, para que esteja em sincronia,host -v
é a mais popular.Mas veja a edição 12084 :
Na imagem do Ubuntu 16.04 há um bug. A solução foi
Adicionando meus dois centavos aqui, porque eu tentei vários desses, mas nenhum funcionou em imagens baseadas em alpino.
No entanto, isso fez o truque:
[ Fonte ]
se você estiver usando a imagem do docker com base em
ubuntu
:Na imagem básica alpine (exemplo use node:10.16.0-alpine):
Usando um contêiner do Fedora (provavelmente também funciona com o Ubuntu):
A solução mais simples que encontrei foi usar o seguinte em docker-compose.yml
Em seguida, em seu arquivo .env (que o docker-compose lê automaticamente)
Isso permite que você coloque o docker-compose.yml sob controle de versão e use um arquivo .env personalizado que pode ser ignorado pelo git.
Você obtém um valor padrão para o contêiner e obtém personalização, o melhor dos dois mundos.
Para o Fedora nenhuma outra mudança foi necessária, simplesmente funciona!
Obrigado a VonC pelas informações e link para o problema. Isso parece uma bagunça tão complicada, então fiz alguns testes na minha própria ideia de como resolver isso e parece funcionar muito bem.
(siga as instruções para selecionar meu fuso horário)
Então atualizei meus Dockerfiles para refletir isso:
Deve haver algo de errado com isso porque parece muito fácil passar despercebido... Ou isso é aceitável?