使用docker-compose设置容器时区

non*_*ame 20 containers docker dockerfile docker-compose devops

我有一个docker-compose文件运行一些Dockerfiles来创建我的容器.我并不想修改自己的Dockerfiles设置时区,因为他们可以通过我的团队成员随时更改,我有一个码头工人,compose.override.yml文件,以使当地环境的变化.但是,我的一个容器(基于Selenium的容器)似乎没有拉出主机时区,这对我来说是个问题.基于此我想在我的所有容器上强制执行时区.我现在在我的Dockerfiles中

ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
Run Code Online (Sandbox Code Playgroud)

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

Ber*_*ard 25

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"
Run Code Online (Sandbox Code Playgroud)

编辑:问题没有要求它,但我刚刚添加,exec my-main-application以显示如何指定主要过程.exec这里很重要,以确保my-main-application接收Ctrl-C(SIGINT/SIGKILL).


MxW*_*ild 13

这是简单的解决方案:

environment:
  - TZ=America/Denver
Run Code Online (Sandbox Code Playgroud)

  • 我想知道是否需要像 `"TZ=America/Denver"` 这样的引号 (2认同)
  • 不需要。不需要引号。 (2认同)
  • 我正在使用节点 apline 构建。tzdata 包丢失。我需要将“RUN apk add tzdata”添加到 Dockerfile 中才能正常工作。 (2认同)

小智 5

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

ipchanger:
  image: codertarasvaskiv/ipchanger:raspberry
  volumes:
    - "/etc/localtime:/etc/localtime:ro"
Run Code Online (Sandbox Code Playgroud)
  • ro-表示容器只能从主机的/ etc / localtime中读取。


小智 5

version: '3.6'
services:
  mysql:
    image: mysql:5.6
    restart: always
    container_name: dev-mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
     - TZ=Asia/Shanghai
     - MYSQL_ROOT_PASSWORD=password # set the root password
    ports:
      - '3306:3306'
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"

Run Code Online (Sandbox Code Playgroud)

这是我的 docker-compose.yaml 的 mysql

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

version: '3.6'
services:
  mysql:
    image: mysql:5.6
    restart: always
    container_name: dev-mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
     - TZ=Asia/Shanghai
     - MYSQL_ROOT_PASSWORD=password # set the root password
    ports:
      - '3306:3306'
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"

Run Code Online (Sandbox Code Playgroud)