Назад | Перейти на главную страницу

Как установить языковой стандарт при создании образа Ubuntu Docker с помощью Packer?

я использую Упаковщик для создания образа Docker на основе Ubuntu 14.04, т.е. в моем шаблоне Packer у меня есть:

"builders": [{
    "type": "docker",
    "image": "ubuntu",
    "commit": true
}],

и я создаю его, используя:

$ packer build my.json

Что мне нужно вставить в шаблон, чтобы получить конкретный языковой стандарт (скажем, en_GB), который будет установлен, когда я впоследствии запущу следующее?

$ sudo docker run %IMAGE_ID% locale

Дополнительная информация

В нынешнем виде я получаю:

LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
...
LC_IDENTIFICATION="POSIX"
LC_ALL=

что вызывает несколько проблем с тем, что я хочу сделать дальше, например, с установкой определенных пакетов Python.

Я пробовал добавить:

{
    "type": "shell",
    "inline": [
        "locale-gen en_GB.UTF-8",
        "update-locale LANG=en_GB.UTF-8 LANGUAGE=en_GB.UTF-8 LC_ALL=en_GB.UTF-8"
    ]
}

но пока это настраивает конфигурацию локали, это не влияет на env, используемый docker run. Даже если я добавлю дополнительные строки экспорта, например:

{
    "type": "shell",
    "inline": [
    ...
        "export LANG=en_GB.UTF-8"
    ]
}

они не действуют, предположительно потому, что при использовании docker run, это не дочерний процесс команды packer build используется при первоначальном запуске этих команд.

В качестве обходного пути я могу передать env vars в docker run, но не хочу делать это каждый раз, например:

sudo docker run -e LANG=en_GB.UTF-8 -e LANGUAGE=en_GB.UTF-8 -e LC_ALL=en_GB.UTF-8 %IMAGE_ID% locale

Я не пробовал, но, согласно документации, вы сможете сделать это с помощью docker-import постпроцессор: https://www.packer.io/docs/post-processors/docker-import.html

Пример:

{
  "type": "docker-import",
  "repository": "local/ubuntu",
  "tag": "latest",
  "changes": [
    "ENV LC_ALL en_GB.UTF-8"
  ]
}