当前位置: 首页 > 知识库问答 >
问题:

Docker集装箱时区仍为UTC

陆文博
2023-03-14

我一直在将ms sql docker容器设置为使用Linux主机日期时间设置。我使用的是docker compose文件,在大多数情况下,解决方案似乎是像这样映射卷(参考文献:Bobcares,so):

volume:
  - /etc/timezone:/etc/timezone:ro
  - /etc/localtime:/etc/localtime:ro

乍一看,这看起来不错。我可以检查容器认为它是什么日期,并且它反映了宿主的本地时区。但是,SQL实例仍然显示GetDate()的UTC时间。

容器中有一个符号链接,看起来总是这样:localtime-

我需要它在容器重新启动时持续存在,并且我想在部署到多个时区时使用docker-comact文件中的卷来处理时区。我肯定问题是我的新手linux技能,所以很高兴听到关于如何改进的建议。如何修复符号链接问题(如果这确实是问题的根本原因)?

主机是:Ubuntu 20.04.1 LTS(焦点Fossa)ms-sql图片是:mcr.microsoft.com/mssql/server: 2019-最新


共有2个答案

钮才哲
2023-03-14

我一直在搜索,我在这篇文章中找到了答案。

我需要的全部步骤:

  • 设置主机的时区
  • 添加TZ环境变量到docker-compose.yml
  • 将主机时区的卷映射添加到docker-compose.yml

ms sql的My docker conpose部分现在看起来像这样(为了简洁起见,省略了一些部分):

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

我需要在部署之间进行的唯一更改是环境变量。

梅飞龙
2023-03-14

在我的例子中,将此添加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
 类似资料:
  • 我有一个框设置为在一个容器框内。这个集装箱箱还会有其他内容。 我正在尝试垂直居中内框内的文本。为此,我将与一起使用。 作为最后一步,我现在希望高度总是充满集装箱箱。以便此内框内垂直居中的文本始终垂直居中于容器框内。 > 容器框的高度会根据其内容进行调整,因此我无法在CSS中设置框的特定高度。 对于内框上的也没有帮助。 我怎样才能使这个内箱始终100%垂直地充满它的集装箱箱? 这里有一个示例代码段:

  • 有一个标记,它在运行后自动移除容器。我想知道对于特定的服务,是否有一个与docker-compose.yml等效的配置,因为我在yml中获得的其中一个服务是一个一次性构建过程,它应该只输出编译文件并自行消失。

  • BigGDB的Dockerfile: 有人能告诉我,我需要在docker-compose.yml或命令中做哪些更改,以使java容器访问biggdb(postgres)容器的端口吗?

  • 例如,如果我使用命令< code > docker run-it alpine/bin/sh ,它会启动一个终端,之后我就可以安装软件包和所有东西。现在,当我使用< code>exit命令时,它会返回到终端。(主要的一个) 那么,如何再次访问同一容器呢?当我再次运行该命令时,我得到了一个新鲜的高山。 请帮帮忙

  • 我在Fargate上使用AWS EKS测试kubernetes设置,在容器启动时遇到问题。 这是一个利用hibernate的java应用程序。它似乎在启动时无法连接到MySQL服务器,出现了“通信链路故障”错误。数据库服务器在AWS RDS上正常运行,docker映像可以在本地按预期运行。 我想知道这是否是由于容器/节点/服务上没有正确配置MySQL端口3306造成的。想看看您是否能发现问题所在,

  • 我知道所有任务的信息都可以通过curl http://localhost:51678/v1/tasks获得