如何在 Docker 容器中同步时区

如何在 Docker 容器中同步时区

我在堆栈的所有容器中都有类似的时区时遇到一些问题docker-compose

我尝试将TZ=Europe/Paris环境变量添加到容器中,并尝试使用:

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

目前,它可以/etc/timezone在基于 Debian/Ubuntu 的容器上运行(绑定),但不能在基于 Alpine 的容器上运行。

最佳实践是什么和/或什么适用于所有 Linux 容器?

答案1

用音量来改变时区,效果不是很好。您在主机和容器之间引入了许多依赖关系。如果您在 kubernetes 或托管环境中运行,则无法控制主机的时区。

我会建议使用TZ变量。

对于 ubuntu,如果我的图像已经有该包,我就可以设置 TZ 变量tzdata

适用于 ubuntu 18.04/19.04/19.10

这些不起作用

for V in 18.04 18.10 19.04 19.10
do
   docker run -e TZ=America/New_York -it ubuntu:${V} /bin/bash -c date
done

但这些

for V in 18.04 18.10 19.04 19.10
do
    docker run -e TZ=America/New_York -it ubuntu:${V} \
       /bin/bash -c '( export DEBIAN_FRONTEND=noninteractive ; apt-get update ; apt-get install tzdata ) >/dev/null 2>&1 ; date'
done

*对于 DEBIAN 拉伸/Buster *

这些正在发挥作用

docker run -e TZ=America/New_York -it debian:stretch /bin/bash -c date
docker run -e TZ=America/New_York -it debian:buster-slim /bin/bash -c date
docker run -e TZ=America/New_York -it debian:buster /bin/bash -c date
docker run -e TZ=America/New_York -it debian:stretch-slim /bin/bash -c date

对于阿尔卑斯山

这是工作:

docker run -e TZ=America/New_York -it alpine:3.10 date

这是行不通的:

docker run -e TZ=America/New_York -it alpine:3.10 /bin/sh -c '(apk update ; apk add tzdata)>/dev/null 2>&1  ; date '

对于 CentOS

这些正在发挥作用

 for V in 6 7 8 ; 
 do  
      docker run -e TZ=America/New_York -it centos:${V}  /bin/bash -c date ; 
 done

相关内容