-
dockerfile 한국어 로케일 설정(feat. 우분투와 데비안의 차이)Programming 2021. 8. 10. 15:43
어플리케이션 내부나 쉘에서 한글이 등장할 때가 있는데 그때마다 오류가 생겨서 아예 언어셋을 UTF-8 인코딩된 한글 언어셋으로 설정했다.
해당 언어셋을 설치하기 위해서 아래와 같은 명령어를 dockerfile에 명시했다.
RUN apt-get update && apt-get install -y locales git # Locale RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 ENV PYTHONIOENCODING=utf-8
빌드 한 뒤에 docker run -it imagename /bin/bash 로 도커 내부의 쉘로 접속했더니 다음과 같은 경고가 떴다.
bash: warning: setlocale: LC_ALL: cannot change locale (ko_KR.UTF-8) bash: warning: setlocale: LC_ALL: cannot change locale (ko_KR.UTF-8)
locale -a로 확인해봐도 ko_KR.UTF-8이 추가되지 않은 것을 확인할 수 있었다.
원인
결론적으로 내가 빌드하려는 컨테이너의 베이스 이미지가 python:3.6-slim-buster 즉 데비안을 베이스로한 파이썬 환경이었기 때문이다.
우분투에서 줬던 로케일 설정 방식을 그대로 적용하다가 생긴 일이었던 것.
우분투와 데비안의 로케일 설정은 기본적으로 같지만 로케일을 생성할 때 약간의 차이가 있다. 우분투는 locale-gen을 실행할 때 생성하고자 하는 로케일 값을 인자로 넘기지만 데비안에서는 로케일 값을 인자로 넘겨주더라도 이 로케일이 생성되지 않는 차이점이 있다.
데비안에서 locale-gen 인자로 넘겨받은 로케일을 생성하는 대신 /etc/locale.gen 파일에 있는 로케일을 생성해준다. 이 파일에서 생성하고자 하는 로케일을 언코멘트 하고 locale-gen을 실행하면 로케일이 생성된다.
root@0e8502bbb0c0:/# sed -i 's/^# \(ko_KR.UTF-8\)/\1/' /etc/locale.gen root@0e8502bbb0c0:/# locale-gen Generating locales (this might take a while)... ko_KR.UTF-8... done Generation complete.
따라서 데비안에서는 locale-gen 대신 localedef를 사용하면 좀 더 명확하게 로케일을 생성할 수 있다.
해결 방법1
RUN apt-get install -y locales locales-all ENV LC_ALL ko_KR.UTF-8
locales-all을 설치해서 해결하는 방법이다. 다만 모든 로케일 파일들을 불러오기 때문에 이미지 용량이 무려 200MB나 올라가기 때문에 권장하지 않는 방법이다.
해결 방법2
RUN apt-get update && apt-get install -y locales git # Locale RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 ENV PYTHONIOENCODING=utf-8
localedef를 통해 명확하게 로케일을 생성하는 방법이다. 해당 dockerfile로 빌드시
위와 같이 bash에서 한글도 사용할 수 있고 locale -a로 ko_KR.utf8이 추가된 것도 확인할 수 있다.
참고
도커(Docker) 컨테이너 로케일 설정: 데비안(Debian), 우분투(Ubuntu) 이미지에서 한글 입력 문제
Unable to locate package language-pack-en
'Programming' 카테고리의 다른 글
kafka retention 용량 설정 값 이해하기 (0) 2023.05.01 ELT 툴 Airbyte 개요 및 M1 mac local환경 세팅 (0) 2022.04.13 Luigi로 batch job 모니터링 및 스케줄링 (0) 2021.06.19 Druid + superset로 BI 아키텍쳐 구축하기 (0) 2021.03.28 argument v.s parameter, function v.s. method (0) 2020.12.13