Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Как победить искажение текста кирилицы в bash, запущенном в Docker-контейнере?

#docker #кириллица #locale


Настроил локаль для контейнера:

# Set the russian locale
RUN apt-get clean && apt-get update && apt-get install -y locales
RUN locale-gen ru_RU.UTF-8
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8


При этом русский текст в bash терминале все-равно работает неправильно: ввод начинается
с символа ":�", вставка текста на русском выгляди точно также (начало строки искажается
при вставке). Как бы справиться с этой проблемой?
    


Ответы

Ответ 1



Пример из рабочего Dockerfile, проверено и работает. FROM php:7.2-apache RUN apt-get update && apt-get install -y locales # Locale RUN sed -i -e \ 's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen \ && locale-gen ENV LANG ru_RU.UTF-8 ENV LANGUAGE ru_RU:ru ENV LC_LANG ru_RU.UTF-8 ENV LC_ALL ru_RU.UTF-8 # +Timezone (если надо на этапе сборки) ENV TZ Europe/Moscow RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Ответ 2



вероятно, в образе, используемом вами, не сгенерирована такая локаль (ru_RU.UTF-8). посмотрите список командой locale -a (приведён пример вывода): $ docker run --rm -ti имя-образа locale -a C C.UTF-8 POSIX для нормальной работы с кириллицей вполне подойдёт имеющаяся локаль C.UTF-8: $ docker run --rm -ti -e LC_ALL=C.UTF-8 ubuntu:16.04 bash если же необходима именно русскоязычная локаль, то её надо сгенерировать. наиболее, пожалуй, универсальный способ — использовать скрипт locale-gen: $ locale-gen ru_RU.UTF-8 Generating locales (this might take a while)... ru_RU.UTF-8... done Generation complete. скрипт этот присутствует (в debian-основных дистрибутивах) в пакет locales, который в вашем образе, скорее всего, тоже отсутствует, и его надо установить. демо-пример для проверки: $ docker run --rm -ti -e LC_ALL=ru_RU.UTF-8 ubuntu:16.04 bash -c 'apt update && apt install -y locales && locale-gen ru_RU.UTF-8; bash'

Комментариев нет:

Отправить комментарий