Onde os contêineres do Docker obtêm suas informações de horário? 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 resolvi isso fazendo o seguinte no meu Dockerfile:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
No entanto, por algum motivo, isso parou de funcionar. Pesquisando online, 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á?
Alpine
, precisará instalartzdata
primeiro, consulte aqui github.com/gliderlabs/docker-alpine/issues/136-v /etc/localtime:/etc/localtime:ro
(CentOS) meio que funciona. A data da linha de comando do contêiner interno retorna a data no formato de fuso horário esperado. Mas o jenkins executado no contêiner acha que o fuso horário é UTC. Por quê? / etc / localtime é um link simbólico para ../usr/share/zoneinfo/UTC no contêiner criado. O conteúdo do arquivo UTC no contêiner agora é o novo fuso horário. Mas os jenkins (e talvez outro software baseado em java) usam o nome do link simbólico que ainda é "UTC". Procurando por solução. . .Respostas:
O segredo aqui é que
dpkg-reconfigure tzdata
simplesmente cria/etc/localtime
como uma cópia, hardlink ou link simbólico (um link simbólico é preferido) para um arquivo/usr/share/zoneinfo
. Portanto, é possível fazer isso totalmente no seu Dockerfile. Considerar:E como bônus, o TZ também será definido corretamente no contêiner.
Isso também é independente de distribuição, por isso funciona com praticamente qualquer Linux.
Nota: se você estiver usando uma imagem alpina, precisará instalar a
tzdata
primeira. (veja esta edição aqui )Se parece com isso:
fonte
tzdata
pacote instalado para fazer isso funcionar.TZ
variável. Não precisei configurar os links simbólicos ou qualquer outra coisa.Geralmente, é suficiente definir uma variável de ambiente no contêiner do docker, da seguinte maneira:
Claro que isso funcionaria também com
docker-compose
.fonte
ubuntu:16.04
, não tenha otzdata
pacote que deve ser adicionado ao Dockerfile.A montagem
/etc/localtime
na imagem, para que ela esteja sincronizada,host -v
é a mais popular.Mas veja a edição 12084 :
fonte
RUN echo "Europe/London" > /etc/timezone
Você pode adicionar seus arquivos locais (/ etc / fuso horário e / etc / localtime) como volume no seu docker-container.
Atualize seu
docker-compose.yml
com as seguintes linhas.Agora, o tempo do contêiner é o mesmo do seu host
fonte
echo "Europe/Paris" > /etc/timezone
antes de reiniciar o contêiner.Na imagem do ubuntu 16.04 há um bug. A solução foi
fonte
se você estiver usando a imagem do Docker com base em
ubuntu
:fonte
Obrigado a VonC pelas informações e link para o problema. Isso parece uma bagunça tão complicada, então eu testei minha própria idéia de como resolver isso e parece funcionar muito bem.
(siga as instruções para selecionar meu fuso horário)
Em seguida, atualizei meus Dockerfiles para refletir isso:
Deve haver algo errado com isso, porque parece fácil demais ser esquecido ... Ou isso é aceitável?
fonte
exit
o contêiner. Isso está no Debian.Adicionando meus dois centavos aqui, porque tentei vários deles, mas nenhum funcionou em imagens baseadas em alpinos.
No entanto, isso fez o truque:
[ Fonte ]
fonte
Uma maneira mais genérica de definir o fuso horário nos
docker run
argumentos:Ou para reutilização:
fonte