Docker Ubuntu 14.04 컨테이너에서 로캘을 유니 코드로 구성하는 방법은 무엇입니까?


30

Docker를 사용하여 Ubuntu Trusty 컨테이너를 설치했으며 연결하면 로케일이 최소로 설정되어 있음을 알 수 있습니다.

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=

유니 코드 로캘 (예 : 미국 영어 로케일) 을 사용해야합니다 en_US.UTF-8.

/ etc / default / locale 파일을 편집하고 이것을 안에 넣었습니다.

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

그러나 컨테이너를 떠난 후에도 로케일이 올바르게 설정되지 않았습니다.

또한 update-locale성공하지 않고 명령을 사용해 보았습니다 .

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=

로컬 구성에 다음 구성이 있습니다.

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=

Docker 컨테이너에서 어떻게 동일하게 사용할 수 있습니까?

미리 감사드립니다!

답변:


19

/etc/default/locale파일은 PAM에 의해로드됩니다; 참조 /etc/pam.d/login예를 들어. 그러나 Docker 컨테이너에서 명령을 실행할 때 PAM이 호출되지 않습니다. 로케일을 구성하려면 Dockerfile에서 관련 환경 변수를 설정하십시오. 예:

FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]

1
효과가 있었다! PAM에 대한 설명도 감사합니다. 결국, 이미지를 다시 작성해야하고 (을 사용하여 sudo docker build .) 정상적으로 작동합니다.
Pierre

53

나는 이것을 내에서 사용한다 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

하나의 ENV라이너를 사용할 수도 있습니다 .

RUN locale-gen en_US.UTF-8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'

2
이것이 정답입니다. locale -a로케일이 기본 이미지에서 완전히 제거되었음을 나타냅니다. locale-gen다시 생성하여 사용 가능하게합니다.
Abe Voelker

이것은 어디에 있습니까 dockerfile? 다운로드 한 이미지를 편집 할 수 있습니까?
Mikhail Batcer

@MikhailBatcer Dockerfile프로젝트 디렉토리에서 를 만들고 FROM지시문을 사용하여 기존 이미지를 확장 할 수 있습니다 . 그런 다음 언급 한 줄을 추가하십시오. Dockerfile 여기
czerasz

3
다음과 같은 오류가 발생 locale-gen: not found했습니다.. 솔루션 : stackoverflow.com/a/39761477/1743367
JustAC0der

7

시험

ENV LANG C.UTF-8

당신이 얻을 경우 unsupported locale setting오류를하고 할 새로운 로케일을 설치하지.


한 번의 실행으로 이미지를 다시 작성하지 docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
않아도됩니다

1

나는 이것을 시도하고 Dockerfile내가 추가 한 이미지 후에 도움이되었다.

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

실행

docker-compose build
docker-compose up -d
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.