我在堆栈的所有容器中都有类似的时区时遇到一些问题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