я использую Упаковщик для создания образа 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"
]
}