主机时区更改不会反映在 docker 容器上

发布于 2025-01-13 12:30:20 字数 704 浏览 0 评论 0原文

对于一个项目,我需要一个时区与主机时区同步的容器。我的容器应该能够在运行时同步到主机上的时区更改。为此,我根据谷歌搜索主题安装了 /etc/localtime 符号链接和 /etc/timezone 文件。

我的主机是 Ubuntu 20.04.4 LTS。

下面是我的 docker run 命令:

docker run \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 --name openjdk-jdk11-slim \
 -it --rm \
 openjdk:11-jre-slim

容器启动后,如果我通过以下方式更改主机的时区:

sudo timedatectl set-timezone Africa/Bissau

我看到容器(容器的交互式终端)内的 date 命令仍然输出创建容器时的时区状态。更改主机上的时区后,如果我重新创建容器,那么只有我才能在容器中获取新时区。

有没有一种优雅的方法来解决这个问题?

PS:我的Docker版本如下;

testuser@test-ubuntu:~$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu5~20.04.2

For a project, I need a container whose timezone is synced to host machine's timezone. My container should have the ability to sync to timezone changes on host machine at runtime. For this purpose I mounted /etc/localtime symlink and /etc/timezone file as per googling the topic.

My host machine is Ubuntu 20.04.4 LTS.

Below is my docker run command:

docker run \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 --name openjdk-jdk11-slim \
 -it --rm \
 openjdk:11-jre-slim

After container starts, if I change the timezone of host machine via;

sudo timedatectl set-timezone Africa/Bissau

I see that date command inside container (container's interactive terminal) still outputs the timezone state of when container created. After changing timezone on host, if I recreate container, then only I can get the new timezone in container.

Is there an elegant way to fix this?

PS: My Docker version is as follows;

testuser@test-ubuntu:~$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu5~20.04.2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉南桥 2025-01-20 12:30:20

您是否尝试在 Docker 容器中设置环境变量?举个例子,

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

Did you try to set an environment variable in the Docker container? As an example,

docker run -e TZ=Europe/Amsterdam debian:jessie date
魔法唧唧 2025-01-20 12:30:20

通过 cat 填充 TZ,以便它是自动的:

if [ -f "/etc/timezone" ]; then
    temp_tz="$(cat /etc/timezone)"
    if [ ! -z "$temp_tz" ]; then
            export TZ=$temp_tz
    fi
fi

Populate the TZ via cat so it's automatic:

if [ -f "/etc/timezone" ]; then
    temp_tz="$(cat /etc/timezone)"
    if [ ! -z "$temp_tz" ]; then
            export TZ=$temp_tz
    fi
fi
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文