如何创建时区与本地计算机时区匹配的 Docker 容器?

Dav*_*ave 6 sql-server timezone docker dockerfile docker-compose

我正在使用 Docker 19。我有以下 Dockerfile。请注意我如何将时区设置为美国东部时间...

FROM microsoft/mssql-server-linux:latest
  
RUN apt-get update
RUN apt-get install unzip -y

RUN apt-get install tzdata
ENV TZ=America/New_York
RUN ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
...
Run Code Online (Sandbox Code Playgroud)

有什么方法可以创作我的文件,以便将时区设置为运行它的本地机器?我在中部时区,但在其他时区有队友。如果它有用,上面是 docker-compose 文件的一部分,大致如下所示......

version: "3.2"
services:

  sql-server-db:
    build: ./
    container_name: sql-server-db
    image: microsoft/mssql-server-linux:2017-latest
    ports:
      - 1433:1433
Run Code Online (Sandbox Code Playgroud)

我们中的一些人使用 Mac,但人们可能使用 Windows 或 Ubuntu。如果更容易,您可以考虑每个人都在使用 Mac。

Lin*_*nPy 5

使用 docker run 命令:

-e TZ=`ls -la /etc/localtime | cut -d/ -f8-9`
Run Code Online (Sandbox Code Playgroud)

来源

如果您仍然想使用卷,则需要从 MAC 中的 Docker UI 共享 /etc“首选项 --> 资源 --> 文件共享”

更新

对于 docker-compose :

在构建部分使用:

args:
  - TZ
Run Code Online (Sandbox Code Playgroud)

进而:

environment:
    - TZ=${TZ}
Run Code Online (Sandbox Code Playgroud)

然后像重新构建后一样启动它:

export TZ=`ls -la /etc/localtime | cut -d/ -f8-9` && docker-compose up -d --build
Run Code Online (Sandbox Code Playgroud)


Ali*_*Tou 0

如果可以使用脚本来执行 docker-compose 作业,我认为解决方法可能是在 shell 变量中设置当前时区,并将其作为环境变量传递给容器。

该脚本将是:

TIMEZONE=`cat /etc/timezone`
docker-compose up -d  # or whatever
Run Code Online (Sandbox Code Playgroud)

在 docker-compose 文件中,您使用此变量:

web:
  environment:
    - TZ=${TIMEZONE}
Run Code Online (Sandbox Code Playgroud)

注意:您不需要在构建时执行任何操作来设置时区。您可以将TZ环境变量传递给容器,容器的时区将是您想要的。

PS 我对 Mac 不熟悉,所以/etc/timezone会在不同的位置,或者 Mac 可能在预定义的环境变量本身内提供这个值。