2021. 8. 10. 15:43

dockerfile 한국어 로케일 설정(feat. 우분투와 데비안의 차이)

어플리케이션 내부나 쉘에서 한글이 등장할 때가 있는데 그때마다 오류가 생겨서 아예 언어셋을 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) 이미지에서 한글 입력 문제

 

도커(Docker) 컨테이너 로케일 설정: 데비안(Debian), 우분투(Ubuntu) 이미지에서 한글 입력 문제

도커 우분투, 데비안 이미지에서는 기본적으로 한글 입력을 지원하지 않습니다. 한글을 입력하기 위해서는 로케일 설정을 UTF-8로 지정할 필요가 있습니다. 이 글에서는 로케일 개념과 함께 도커

www.44bits.io

Unable to locate package language-pack-en

 

Unable to locate package language-pack-en

On my NodeJS server (running as docker image)... Dockerfile FROM node:4.8-slim RUN apt-get update -y && \ apt-get install -yqq locales git ...there is no english locale installed: ...

stackoverflow.com

 


  • 정수현 2021.08.20 10:37

    많은 도움 되었습니다. 감사합니다!

    은유  2021.08.23 22:48 신고

    댓글 감사합니다~!!