在Docker中更改区域设置会阻止许多命令执行?

时间:2017-02-22 08:39:20

标签: ruby linux shell docker ubuntu-16.04

为什么我在Dockerfile中使用这个更改我的语言环境...

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容器中Locale更改的副作用,并且可能不是真正的问题吗?

1 个答案:

答案 0 :(得分:0)

所以我刚想通了,结果我使用了错误的Docker语言环境类型,这与此问题有关here

一个小而重要的区别Cen_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作为区域设置,vs en_US或其他?

现在Ruby / irb已成功运作(虽然我的生命中有4个小时丢失了.....