使用docker-compose设置容器时区

时间:2016-08-26 18:28:13

标签: docker containers docker-compose dockerfile devops

我有一个运行一些Dockerfiles的docker-compose文件来创建我的容器。我不想编辑我的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语法中复制相同的命令?

5 个答案:

答案 0 :(得分:19)

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)。

答案 1 :(得分:5)

这是简单的解决方案:

environment:
  - TZ=America/Denver

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

docker-compose -f docker-compose.yaml stop
docker-compose -f docker-compose.yaml rm
docker-compose -f docker-compose.yaml start

这是我的mysql的docker-compose.yaml

提醒,您需要重新创建容器,而不是重新启动。 如果您更改了Yaml,则需要重新创建

ID     PRICE      DURATION
1      10         30
2      200        730
3      40         60
4      300        400
5      100        180

答案 4 :(得分:0)

 version: '2'
 services:
   ServiceA:
     image: image:
   - '/etc/localtime:/etc/localtime:ro'