프로그래밍언어/리눅스 2017.05.30 10:56

CentOS 에서 locale 에 en_US.utf8 추가 하기

docker에 centos 를 컨테이너를 올리고 운용 중이다가 python에서 한글로 print 를 찍으면 에러가 발생했습니다.

그래서 언어 설정을 확인해보았습니다.

[] locale
LANG=
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=

POSIX로 설정되어 있네요. 어떤 locale 을 지원하는지 확인해 보았습니다.

[] locale -a
C
POSIX

C, POSIX 만 지원하네요. 그래서 구글링을 해본 결과, 특정 패키지를 재설치하라는 내용이 있어 재설치하였으나, 제가 원하는 UTF8 문자셋이 나타나지 않았습니다.

조금더 검색해보니 locale 을 정의해주는 기능이 기본적으로 있었습니다.

[] localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

위 명령대로 실행하니, en_US.utf8 가 추가되었습니다.

[] locale -a
C
POSIX
en_US.utf8

그럼 en_US.utf8 을 적용해보겠습니다.

[] export LANG='en_US.utf8'

제대로 적용되었는지 확인해 보겠습니다.

[] locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

python 에 한글로 print를 찍으면 정상적으로 출력되는것을 확인 할 수 있었습니다.

문제는 매번 docker 에 bash로 붙을 때마다 설정을 해주어 불편하네요.

docker 환경설정에서 적용이 가능한지 찾아보았습니다.

ENV LANG en_US.utf8
ENV LC_ALL en_US.utf8

이렇게 docker 컨테이너 환경변수 설정에 LANG, LC_ALL 에 위에서 생성한 en_US.utf8 을 적용하면 됩니다.