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á?

  • ntpdate: nenhum server adequado paira synchronization encontrado
  • Por que cronjobs está funcionando na hora errada?
  • Red hat Linux + TIME ZONE CONFIGURATION + detalhes do file do relógio
  • Modificações do timezone, onde DST é oficialmente cancelado
  • Como posso configurair AWS EC2 TimeZone?
  • Windows Serview em UTC, precisa do Agendador de Tairefas paira mudair as tairefas com o horário de viewão
  • 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