Docker: настройка tzdata и timezone во время билда

Автор: | 14/07/2018
 

При сборке образа – билд останавливается с запросом на настройку tzdata.

Dockerfile выглядит сейчас так:

FROM ubuntu:18.04
RUN apt update && apt install -y python-pip python-dev ssh python-boto3
RUN pip install ansible==2.4.3.0

Запускаем сборку:

[simterm]

admin@jenkins-production:~$ docker build -t proj/proj-ansible:1.1 .
Sending build context to Docker daemon  29.62MB
Step 1/3 : FROM ubuntu:18.04
 ---> 113a43faa138
Step 2/3 : RUN apt update && apt install -y python-pip python-dev ssh python-boto3
...

Setting up tzdata (2018d-1) ...
...
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
  2. America     5. Arctic     8. Europe    11. SystemV
  3. Antarctica  6. Asia       9. Indian    12. US
Geographic area: 

[/simterm]

И тут сборка зависает в ожидании ввода данных, при чём даже после указание региона – процесс не продолжается.

Что бы избежать этого запроса, особенно если сборка выполняется автоматически – добавляем настройку tzdata прямо в Dockerfile.

Создадим переменную с именем TZ, в которой укажем timezone, а затем создадим файл /etc/timezone:

FROM ubuntu:18.04
ENV TZ=Europe/Kiev
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt install -y python-pip python-dev ssh python-boto3
RUN pip  install ansible==2.4.3.0

Собираем ещё раз:

[simterm]

admin@jenkins-production:~$ docker build -t proj/proj-ansible:1.1 .
Sending build context to Docker daemon  29.62MB
Step 1/5 : FROM ubuntu:18.04
 ---> 113a43faa138
Step 2/5 : ENV TZ=Europe/Kiev
 ---> d2debbbd9f86
Step 3/5 : RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
...
 ---> 0d2422a01f56
Successfully built 0d2422a01f56
Successfully tagged proj/proj-ansible:1.1

[/simterm]

Готово.