Как настроить локали для Unicode в контейнере Docker Ubuntu 14.04?
Я установил Ubuntu Trusty контейнер с помощью Docker, и когда я подключаюсь к нему, я вижу, что языковой стандарт установлен на минимум:
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=
Мне нужно использовать язык Unicode (например, американский английский, 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?
Заранее спасибо!
4 ответа
/etc/default/locale
файл загружается PAM; увидеть /etc/pam.d/login
например. Однако PAM не вызывается при запуске команды в контейнере Docker. Чтобы настроить языковой стандарт, просто установите соответствующую переменную среды в вашем Dockerfile. Пример:
FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]
Я использую это в моем 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'
Пытаться
ENV LANG C.UTF-8
Если вы получите unsupported locale setting
ошибка и не хочу устанавливать новые локали.
Я попробовал это, и это помогло мне в 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
Это расширенное решение решило мою проблему с локалью Python в контейнере докеров Ubuntu:
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y locales \
&& sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& dpkg-reconfigure --frontend=noninteractive locales \
&& update-locale LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8