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

Ruby 在Docker中更改区域设置会阻止许多命令的执行吗?,ruby,linux,shell,docker,ubuntu-16.04,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_MESS

当我使用此…更改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 
。对此..

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:未找到命令

但是如果我将这些更改带到区域设置中,并在重建容器后保持原样,那么一切都会按预期进行:

# 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使用了错误的区域设置类型,这与这个问题有关

一个很小但很关键的区别
C
vs
en\u-US

错误

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
右侧

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
有谁能告诉我为什么Docker使用
C
作为语言环境,而不是
en_US
或其他语言环境


现在Ruby/
irb
已经成功运行了(尽管我已经失去了4个小时的生命……

你能发布这两个DockerFile吗?我希望我能把这个投票数提高100倍。非常感谢。