Использование docker-compose для установки часовых поясов контейнеров

У меня есть файл для докеры, в котором несколько файлов Docker для создания контейнеров. Я не хочу редактировать свои файлы Dockerfiles, чтобы устанавливать временные интервалы, потому что они могут меняться в любой момент членами моей команды, и у меня есть файл docker-compose.override.yml, чтобы внести изменения в локальную среду. Тем не менее, один из моих контейнеров (на основе селена), похоже, не выдает часовую зону хоста, и это создает проблемы для меня. Исходя из этого, я хочу использовать часовые пояса во всех контейнерах. В моем Dockerfiles прямо сейчас я делаю

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

И все работает отлично. Как выполнить повторную копию той же команды в синтаксисе docker-compose?

Ответ 1

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

Ответ 2

Самым простым решением было бы поделиться томом в docker-compose.yml, как это

ipchanger:
  image: codertarasvaskiv/ipchanger:raspberry
  volumes:
    - "/etc/localtime:/etc/localtime:ro"
  • ro - означает, что контейнер может читать только из /etc/localtime хост-машины.

Ответ 3

Это простое решение:

environment:
  - TZ=America/Denver