问题 使用docker-compose设置容器时区


我有一个docker-compose文件运行一些Dockerfiles来创建我的容器。我不想编辑我的Dockerfiles来设置时区,因为它们可以随时由我的团队成员进行更改,并且我有一个docker-compose.override.yml文件来进行本地环境更改。但是,我的一个容器(基于Selenium的容器)似乎没有拉出主机时区,这对我来说是个问题。基于此我想在我的所有容器上强制执行时区。我现在在我的Dockerfiles中

ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

一切正常。如何在docker-compose语法中复制相同的命令?


6479
2017-08-26 18:28


起源

github.com/dnvriend/docker-timezone-test/blob/master/... - Nehal J Wani


答案:


version "2"

services:
  serviceA:
    ...
    environment:
      TZ: "America/Denver"
    command: >
      sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && 
      echo $TZ > /etc/timezone &&
      exec my-main-application"

编辑:问题没有要求,但我刚刚补充 exec my-main-application 显示如何指定主流程。 exec 在这里确保这一点非常重要 my-main-application 收到Ctrl-C(SIGINT / SIGKILL)。


11
2017-08-27 13:23



请记住,docker-compose的“命令”会覆盖默认命令(如果有)。参考: docs.docker.com/compose/compose-file/#/command - Claudio d'Angelis
@ Claudiod'Angelis这是正确的,这也是这里所希望的行为。在快速查看我的代码时,我意识到我需要指定如何启动容器的主进程。现在添加它。 - Alkaline


最简单的解决方案是在docker-compose.yml中共享卷,就像这样

ipchanger:
  image: codertarasvaskiv/ipchanger:raspberry
  volumes:
    - "/etc/localtime:/etc/localtime:ro"
  • ro - 表示容器只能从主机的/ etc / localtime读取。

0
2017-09-26 21:55