Como configurar as localidades para Unicode em um contêiner do Docker Ubuntu 14.04?

23

Eu instalei um contêiner do Ubuntu Trusty usando o Docker e, quando me conecto a ele, vejo que o código de idioma está definido como o mínimo:

sudo docker run -i -t <id> /bin/bash
root@<id>:/# locale
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=

Eu preciso usar um locale Unicode (por exemplo, o inglês dos EUA, en_US.UTF-8 ).

Eu tentei editar o arquivo / etc / default / locale e colocar isso dentro:

# cat /etc/default/locale 
LANG=en_US.UTF-8

Mas mesmo depois de sair do contêiner e voltar, a localidade ainda não está definida corretamente.

Eu também tentei usar o comando update-locale , sem sucesso:

root@cab13a6abe4f:/# update-locale LANG=en_US.UTF-8
root@cab13a6abe4f:/# locale
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=

Na minha configuração local, tenho a seguinte configuração:

LANG=en_US.UTF-8
LANGUAGE=en_US
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=

Como posso ter o mesmo no meu contêiner do Docker?

Obrigado antecipadamente!

    
por Pierre 04.02.2015 / 03:38

4 respostas

14

O arquivo /etc/default/locale é carregado pelo PAM; veja /etc/pam.d/login por exemplo. No entanto, o PAM não é chamado ao executar um comando em um contêiner do Docker. Para configurar a localidade, basta definir a variável de ambiente relevante em seu Dockerfile. Exemplo:

FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]
    
por Andreas Veithen 06.02.2015 / 00:10
45

Eu uso isso no meu Dockerfile :

# Set the locale
RUN locale-gen en_US.UTF-8  
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8

Também é possível usar o ENV one-liner:

RUN locale-gen en_US.UTF-8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
    
por czerasz 26.03.2015 / 11:02
7

Tente

ENV LANG C.UTF-8

Se você obtiver o erro unsupported locale setting e não quiser instalar novos locais.

    
por emisilva 22.09.2016 / 00:27
0

Eu tentei isso e isso me ajudou em Dockerfile depois da minha imagem eu adiciono

ENV LANG='en_GB.UTF-8' LANGUAGE='en_GB:en' LC_ALL='en_GB.UTF-8'
RUN echo en_GB.UTF-8 UTF-8 >> /etc/locale.gen && locale-gen

e execute

docker-compose build
docker-compose up -d
    
por Jogi 27.04.2018 / 12:44