🐙
"Unable to read environment locale: exit now." の解決方法
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
参考
Discussion