Docker 容器时区保持为 UTC
Docker container time zone remains as UTC
我一直在努力设置我的 ms-sql docker 容器以使用 Linux 主机日期时间设置。我正在使用 docker-compose 文件,在大多数情况下,解决方案似乎是像这样映射卷(参考文献:Bobcares, ):
volume:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
乍一看,这看起来不错。我可以检查容器认为是什么日期,它反映了主机本地时区。然而,SQL 实例仍然显示 GetDate()
.
的 UTC 时间
尽管容器内有一个符号 link,它总是看起来像这样:localtime -> /usr/share/zoneinfo/Etc/UTC
。这不是我基于卷映射所期望的,因为它与主机 localtime -> ../usr/share/zoneinfo/Australia/Sydney
不同。我可以在容器内手动更新此 link 并在 SQL returns 上手动更新 GetDate()
正确的本地日期时间。正如预期的那样,在 docker-compose down
上全部丢失。
我需要它在容器重新启动时保持不变,并且我想在我们部署到多个时区时使用 docker-compose 文件中的卷来处理时区。我确定问题出在我的菜鸟 linux 技能组上,很高兴获得有关如何改进它的建议。如何解决符号 link 问题(如果这确实是问题的根本原因)?
主机是:Ubuntu 20.04.1 LTS(Focal Fossa)
ms-sql 图片是:mcr.microsoft.com/mssql/server:2019-latest
在我的例子中,将此添加到 Dockerfile
可以工作并更改我构建的每个图像或 运行:
FROM ubuntu:20.04 # or any other distro
ENV TZ=Asia/Tehran
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
我一直在寻找,我在 中找到了答案。
我需要的完整步骤:
- 设置主机时区
- 添加TZ环境变量到docker-compose.yml
- 将主机时区的卷映射添加到 docker-compose.yml
我的 docker-conpose ms-sql 部分现在看起来像这样(为简洁起见省略了一些部分):
ms-sql-server:
image: damo/sqlexpress:1.0.1
ports:
- "14333:1433"
volumes:
- sqldata:/var/opt/mssql
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
我需要在部署之间进行的唯一更改是环境变量。
我一直在努力设置我的 ms-sql docker 容器以使用 Linux 主机日期时间设置。我正在使用 docker-compose 文件,在大多数情况下,解决方案似乎是像这样映射卷(参考文献:Bobcares,
volume:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
乍一看,这看起来不错。我可以检查容器认为是什么日期,它反映了主机本地时区。然而,SQL 实例仍然显示 GetDate()
.
尽管容器内有一个符号 link,它总是看起来像这样:localtime -> /usr/share/zoneinfo/Etc/UTC
。这不是我基于卷映射所期望的,因为它与主机 localtime -> ../usr/share/zoneinfo/Australia/Sydney
不同。我可以在容器内手动更新此 link 并在 SQL returns 上手动更新 GetDate()
正确的本地日期时间。正如预期的那样,在 docker-compose down
上全部丢失。
我需要它在容器重新启动时保持不变,并且我想在我们部署到多个时区时使用 docker-compose 文件中的卷来处理时区。我确定问题出在我的菜鸟 linux 技能组上,很高兴获得有关如何改进它的建议。如何解决符号 link 问题(如果这确实是问题的根本原因)?
主机是:Ubuntu 20.04.1 LTS(Focal Fossa) ms-sql 图片是:mcr.microsoft.com/mssql/server:2019-latest
在我的例子中,将此添加到 Dockerfile
可以工作并更改我构建的每个图像或 运行:
FROM ubuntu:20.04 # or any other distro
ENV TZ=Asia/Tehran
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
我一直在寻找,我在
我需要的完整步骤:
- 设置主机时区
- 添加TZ环境变量到docker-compose.yml
- 将主机时区的卷映射添加到 docker-compose.yml
我的 docker-conpose ms-sql 部分现在看起来像这样(为简洁起见省略了一些部分):
ms-sql-server:
image: damo/sqlexpress:1.0.1
ports:
- "14333:1433"
volumes:
- sqldata:/var/opt/mssql
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
我需要在部署之间进行的唯一更改是环境变量。