Как настроить локали к Unicode в Докере контейнер Ubuntu 14.04?

Я установил контейнер Надежного человека Ubuntu с помощью Докера, и когда я соединяюсь с ним, я вижу, что локаль установлена на абсолютный минимум:

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=

Как у меня может быть то же в моем контейнере Докера?

Заранее спасибо!

30
задан 3 February 2015 в 19:38

5 ответов

/etc/default/locale файл загружается PAM; см. /etc/pam.d/login, например. Однако PAM не вызывается при выполнении команды в контейнере Докера. Для конфигурирования локали просто установите соответствующую переменную среды в Dockerfile. Пример:

FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]
19
ответ дан 23 November 2019 в 00:45

Я использую это в моем 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'
53
ответ дан 23 November 2019 в 00:45

Попробуйте

ENV LANG C.UTF-8

, Если Вы получаете unsupported locale setting ошибка и не хотите устанавливать какие-либо новые локали.

7
ответ дан 23 November 2019 в 00:45

Я попробовал это, и это помогло мне в 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
0
ответ дан 23 November 2019 в 00:45

Это расширенное решение решило мою проблему с локалью 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
1
ответ дан 24 December 2019 в 06:56

Другие вопросы по тегам:

Похожие вопросы: