Сразу скажу что я пробую с контейнером Ubuntu 20.04.6 LTS. На самом деле это контейнер hyperledger/fabric-orderer, но не важно.

ENV TZ=”Asia/Almaty”

Если вы можете создать свой собственный образ, то можно добавить строки в Dockerfile:

FROM ubuntu:20.04
RUN apt-get update && \
    apt-get install -yq tzdata
ENV TZ="Asia/Almaty"

Тут устанавливается пакет tzdata, но можно обойтись и без него. Об этом ниже.

TZ=”Asia/Almaty” в docker

По сути нам лишь достаточно передать переменную TZ с нужным значением. И по сути всё должно работать.

docker run  -e TZ='Asia/Almaty' -it hyperledger/fabric-orderer:latest bash

Так а почему не работает?

А не работает потому что как нам известно docker образы обычно урезаны, чтобы не занимать много места и т.д. Так вот всё временные зоны у нас хранятся в директории /usr/share/zoneinfo/, которой в контейнере конечно нет.

Cамым простым будет будет проброс этой директории с хоста в контейнер:

docker run  -e TZ='Asia/Almaty' –volume /usr/share/zoneinfo/Asia:/usr/share/zoneinfo/Asia:ro -it hyperledger/fabric-orderer:latest bash

Docker compose file

services:
 orderer2:
    container_name: orderer2
    environment:
      - TZ=Asia/Almaty
    volumes:
      - /usr/share/zoneinfo/Asia:/usr/share/zoneinfo/Asia:ro