🐙

"Unable to read environment locale: exit now." の解決方法

2023/01/21に公開

lualatex のビルド環境を Docker で構築し、 lualatex main.tex を実行したときに

Unable to read environment locale: exit now.

となり、実行できませんでした。備忘録として解決方法を残しておきます。

結論

Dockerfile に以下を追記しました。

RUN apt install -y locales
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
  && locale-gen

これを追記してからコンテナを立ち上げ直したところ、上記の問題は解決しました。

原因

前提として、 Dockerfile は以下のようになっていました。

Dockerfile
FROM paperist/texlive-ja:latest
RUN apt update \
  && apt install -y \
  git\
  libfontconfig1 \
  && rm -rf /var/lib/apt/lists/*

RUN tlmgr update --self --all

コンテナ内の locale の設定等は以下の通りです。

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX

原因としてはおそらく en_US.UTF-8 が入っていなかったことだと思います。
どうやらデフォルトでは locales は入っていないようなので apt install locales でインストールします。そうすると /etc/locale.gen が生成されているので、このファイルの en_US.UTF-8 の部分のコメントアウトを外して、locale-gen を実行することで問題が解消されました。
ja_JP.UTF-8 を使う場合はその箇所を有効にすれば使えると思います。

最終的な Dockerfile は次のようになりました。

Dockerfile
FROM paperist/texlive-ja:latest
RUN apt update \
  && apt install -y \
  git\
  libfontconfig1 \
  locales \
  && rm -rf /var/lib/apt/lists/*

# locale の設定
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
  && locale-gen

RUN tlmgr update --self --all

参考

https://zenn.dev/bilzard/scraps/716fe8aa21a00a

Discussion