在 Docker 中更改语言环境会阻止许多命令的执行?
Changing Locale in Docker Stops Many Commands From Executing?
当我使用这个在 Docker 文件中更改语言环境时怎么会...:
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
...这样我就可以实现语言环境的改变...
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
..至此..
LANG=en_US.UTF-8
LANGUAGE=en_US:en
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=en_US.UTF-8
然后我遇到问题,例如没有执行任何命令:
root@820760edeb77:/# irb
bash: irb: command not found
但是,如果我对语言环境进行这些更改,并在重建容器后将它们保持原样,那么一切都会按预期进行??:
# ENV LANG en_US.UTF-8
# ENV LANGUAGE en_US:en
# ENV LC_ALL en_US.UTF-8
root@820760edeb77:/# irb
2.3.1 :001 >
我不太确定是什么导致了这个问题,更改后的语言环境会阻止命令工作,但我怀疑这可能只是 Docker 容器,可能不是真正的问题?
所以我才弄明白,原来我为 Docker 使用了错误的语言环境类型,这与这个问题 here.
有关
C
与 en_US
的细微但重要的区别:
WRONG
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RIGHT
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
谁能告诉我为什么 Docker 使用 C
作为区域设置,而不是 en_US
或其他区域?
现在 Ruby/irb
正在成功工作(虽然,我的生命损失了 4 小时.....)
当我使用这个在 Docker 文件中更改语言环境时怎么会...:
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
...这样我就可以实现语言环境的改变...
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
..至此..
LANG=en_US.UTF-8
LANGUAGE=en_US:en
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=en_US.UTF-8
然后我遇到问题,例如没有执行任何命令:
root@820760edeb77:/# irb
bash: irb: command not found
但是,如果我对语言环境进行这些更改,并在重建容器后将它们保持原样,那么一切都会按预期进行??:
# ENV LANG en_US.UTF-8
# ENV LANGUAGE en_US:en
# ENV LC_ALL en_US.UTF-8
root@820760edeb77:/# irb
2.3.1 :001 >
我不太确定是什么导致了这个问题,更改后的语言环境会阻止命令工作,但我怀疑这可能只是 Docker 容器,可能不是真正的问题?
所以我才弄明白,原来我为 Docker 使用了错误的语言环境类型,这与这个问题 here.
有关C
与 en_US
的细微但重要的区别:
WRONG
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RIGHT
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
谁能告诉我为什么 Docker 使用 C
作为区域设置,而不是 en_US
或其他区域?
现在 Ruby/irb
正在成功工作(虽然,我的生命损失了 4 小时.....)