Как установить локаль внутри контейнера 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это извлечено из очень хорошего поста на эту тему, из
те, кто использует 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. Для основной операции больше ничего не требуется. Между тем,
locale-genне принимает никаких аргументов, поэтому ни одно из "исправлений", использующих его, не работает.
Я действительно страдал от той же проблемы, но ни один из представленных ответов не работает на 100% с debian:latest, даже если они дают хорошие подсказки.
самая большая разница заключается в том, что вы должны убедиться, что оба localesиlocales-all установлены, последние уже содержат en_US.UTF-8, поэтому вам не нужно генерировать его с помощью local-gen или команды 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
Comments