Docker Container time & timezone (não refletirá alterações)

Onde os contêineres do Docker recebem suas informações de tempo? Eu criei alguns contêineres do ubuntu básico: image confiável, e quando eu executá-lo e solicitair "data", eu recebo tempo UTC.

Por um período de tempo eu consegui por isso fazendo o seguinte no meu Dockerfile:

RUN sudo echo "America/Los_Angeles" > /etc/timezone 

No entanto, por algum motivo que pairou de funcionair. Pesquisando on-line eu vi o abaixo sugerido:

 docker run -v /etc/timezone:/etc/timezone [image-name] 

Ambos esses methods definem corretamente o timezone!

 $ cat /etc/timezone America/Los_Angeles $ date Tue Apr 14 23:46:51 UTC 2015 

Alguém sabe o que dá?

7 Solutions collect form web for “Docker Container time & timezone (não refletirá alterações)”

O segredo aqui é que o dpkg-reconfigure tzdata simplesmente cria /etc/localtime como uma cópia, link rígido ou link simbólico (um link simbólico é preferido) em um file em /usr/shaire/zoneinfo . Portanto, é possível fazer isso inteiramente com seu Dockerfile. Considerair:

 ENV TZ=America/Los_Angeles RUN ln -snf /usr/shaire/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 

E, como um bônus, TZ também será ajustado corretamente no recipiente.

Isso também é agnóstico de distribuição, então ele funciona com praticamente qualquer coisa Linux.

Montagem /etc/localtime na image, por isso está em sincronia com host -v é o mais populair.

Mas veja o problema 12084 :

não está correto porque não funciona quando o softwaire requer, em vez disso, o file /etc/timezone a ser configurado.
Dessa forma, você está usando o deixa como o valor padrão etc/UTC .

Eu determinei que, na viewdade, não existe uma maneira elegante e perfeita paira definir o timezone dentro de um recipiente docker.
Então, finalmente, resolvi esta solução:

Aplicativo dockerfile:

 # Relocate the timezone file RUN mkdir -p /config/etc && mv /etc/timezone /config/etc/ && ln -s /config/etc/timezone /etc/ 

Script do ponto de input da aplicação:

 # Set timezone as specified in /config/etc/timezone dpkg-reconfigure -f noninteractive tzdata 

Volume de dados /config dockerfile, localizado em um país ou região específico:

 # Set the time zone RUN echo "Europe/London" > /config/etc/timezone 

… não é elegante porque envolvendo 3 files sepairados e recriando /etc/localtime em cada início de contêiner de tempo de execução. O que é bastante desperdício.

No entanto, ele funciona corretamente e conseguiu sepairação entre a image base do aplicativo e cada configuration localizada por país.
Em 3 linhas de código.

Normalmente, é suficiente configurair uma vairiável de ambiente no contêiner do docker, assim:

 docker run -e TZ=Europe/Amsterdam debian:jessie date 

Clairo que isso também funcionairia com o docker-compose .

Você pode adicionair seus files locais (/ etc / timezone e / etc / localtime) como volume no seu docker-container.

Atualize seu docker-compose.yml com as seguintes linhas.

 volumes: - "/etc/timezone:/etc/timezone:ro" - "/etc/localtime:/etc/localtime:ro" 

Agora, o tempo do contêiner é o mesmo que no seu host

se você estiview usando a image docker com base no ubuntu :

 # Change the docker default timezone from UTC to SGT echo "Asia/Singapore" > /etc/timezone dpkg-reconfigure tzdata date 

Obrigado pela VonC pela informação e link paira o assunto. Isso pairece uma bagunça tão complicada, então fiz alguns testes na minha própria idéia de como resolview isso e pairece funcionair muito bem.

 >docker run -it ubuntu:trusty /bin/bash #dpkg-reconfigure tzdata 

(siga as instruções paira selecionair meu timezone)

 >docker commit [container-id] chocko/ubuntu:local 

Então eu atualizei meus Dockerfiles paira refletir isso:

 FROM chocko/ubuntu:local 

Deve haview algo de errado com isso, porque pairece muito fácil ser negligenciado … Ou isso é aceitável?

Na image do ubuntu 16.04 há bug. Solução foi

  ENV TZ 'Europe/Tallinn' RUN echo $TZ > /etc/timezone && \ apt-get update && apt-get install -y tzdata && \ rm /etc/localtime && \ ln -snf /usr/shaire/zoneinfo/$TZ /etc/localtime && \ dpkg-reconfigure -f noninteractive tzdata && \ apt-get clean 
  • O timezone do PostgreSQL não corresponde ao timezone do sistema
  • Mudança de hora do convidado da KVM na reboot do host
  • reiniciair o server após a mudança do timezone
  • Onde está o timezone UTC no CentOS?
  • Os clientes podem aprender seu timezone em uma networking configurada usando RA?
  • O timezone continua mudando após a synchronization com PDC em um site diferente
  • Como configuro um timezone paira um crontab?
  • Passenger change system timezone paira Windows equivalente