我在用着打包机基于 Ubuntu 14.04 构建 Docker 镜像,例如在我的 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"
]
}
但尽管这确实设置了语言环境配置,但它并不影响 docker run 使用的环境。即使我添加了额外的导出行,例如:
{
"type": "shell",
"inline": [
...
"export LANG=en_GB.UTF-8"
]
}
它们没有效果,大概是因为当使用时docker run
,它不是packer build
最初运行这些命令时使用的命令的子进程。
作为一种解决方法,我可以将环境变量传递给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
答案1
我还没有尝试过,但是根据文档,您应该能够使用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"
]
}