使用 Packer 构建 Ubuntu Docker 镜像时如何设置语言环境?

使用 Packer 构建 Ubuntu Docker 镜像时如何设置语言环境?

我在用着打包机基于 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"
  ]
}

相关内容