angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Как установить часовой пояс при использовании Python Alpine Docker image Docker image

При использовании Python Alpine Q4_X4_TNEMECALPER_4 мы должны добавить пакет tzdata перед установкой часового пояса.

13 ноября 2019
В Docker
post main image
https://unsplash.com/@danielcgold

При написании приложения на платформе Docker у меня возникла неожиданная проблема, да, еще одна.... Это был первый раз, когда мне пришлось показывать время на странице сайта, работающего на Docker , и оказалось, что время было UTC, а не местное время. В коде я просто использовал обычные вызовы Python для получения времени:

import  datetime

    ...
    now =  datetime.datetime.now()
    hour = now.hour
    minute = now.minute

Я живу в Нидерландах, и когда было 9:30, время показанное на веб-странице было 8:30. Почему? Поиск в интернете показал, что Docker images на базе Ubuntu не имеет этой проблемы. Оказалось, проблема была в Alpine Docker image, я использую изображение Python 3.6-альпина. Размер этого изображения небольшой, но это потому, что они многое пропустили! Решение состоит в следующем:

  1. Добавление пакета tzdata в Docker image
  2. Установка часового пояса в Docker image

Добавить пакет tzdata очень просто. Я использую многоступенчатую сборку Docker , поэтому на первом этапе мы добавляем tzdata. На втором этапе мы копируем каталог zoneinfo с первого этапа на второй. В файле Docker мы также задаем часовой пояс:

FROM python:3.6-alpine as base
...
RUN apk add --update \
    ....
    tzdata \
    ...

FROM python:3.6-alpine
...
COPY --from=base /usr/share/zoneinfo /usr/share/zoneinfo
ENV TZ=Europe/Amsterdam

После этих изменений на странице было показано правильное время. Единственным недостатком является то, что это добавляет еще несколько мегабайт.

Ссылки / кредиты

Setting the timezone
https://wiki.alpinelinux.org/wiki/Setting_the_timezone

Using local time in a Golang Docker container built from Scratch
https://medium.com/@mhcbinder/using-local-time-in-a-golang-docker-container-built-from-scratch-2900af02fbaf

Оставить комментарий

Комментируйте анонимно или войдите в систему, чтобы прокомментировать.

Комментарии

Оставьте ответ

Ответьте анонимно или войдите в систему, чтобы ответить.