Как установить локаль внутри контейнера Ubuntu Docker?

Я запускаю контейнер Ubuntu Docker. У меня есть норвежская клавиатура и нужно использовать норвежские символы (øæå).

моя кодировка символов терминала установлена в UTF-8, и я подключен к своему контейнеру с помощью SSH. Однако я не могу вводить норвежские символы, копировать и вставлять норвежские символы, а также использовать CTL+SHIFT+U+00f8.

пробовал:

locale-gen nb_NO.UTF-8

но ничего не изменилось. Как установить языковой стандарт и клавиатуру внутри контейнера Docker?

6 ответов


поместите в свой Dockerfile что-то адаптированное из

# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8     

это извлечено из очень хорошего поста на эту тему, из

http://jaredmarkell.com/docker-and-locales/


те, кто использует Debian также должны установить locales пакета.

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales

RUN 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 LANG C.UTF-8
ENV LC_ALL C.UTF-8

в ваш Dockerfile. Для основной операции больше ничего не требуется. А пока ... --1--> не принимает никаких аргументов, поэтому ни один из "исправлений", использующих его, не работает.


Я на самом деле пострадал от той же проблемы, но ни один из предоставленных ответов не 100% работает с debian:latest, даже если они дают хорошие подсказки.

самая большая разница заключается в том, что вы должны убедиться, что оба районов и локалей-все установлены, последний уже содержит en_US.UTF-8, поэтому вам не нужно генерировать его с помощью локальный поколения или команды dpkg-перенастроить.

вот что я сделал в своем Dockerfile, чтобы заставить его работать:

FROM debian:latest
RUN apt-get update
RUN apt-get install -y locales locales-all
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

задать эти переменные среды при выполнении команды:

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>

нет необходимости изменять файл Dockerfile.


мне не нравится иметь переменные среды Docker, когда я не ожидаю, что пользователь изображения Docker изменит их. Я думаю, что следующее намного чище:

echo "LC_ALL=en_US.UTF-8" >> /etc/environment

(Edit: это не работает. Кажется, я плохо его проверил.)

просто поставить его где-нибудь в одном RUN. Если у вас нет сгенерированных локалей UTF-8, вы можете выполнить следующий набор команд:

export DEBIAN_FRONTEND=noninteractive
apt-get update -q -q
apt-get install --yes locales
locale-gen --no-purge en_US.UTF-8
update-locale LANG=en_US.UTF-8
echo locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 | debconf-set-selections
echo locales locales/default_environment_locale select en_US.UTF-8 | debconf-set-selections
dpkg-reconfigure locales