python основанный Dockerfile выбрасывает locale.Error: неподдерживаемая настройка локали - PullRequest
2 голосов
/ 07 января 2020

У меня проблема с передачей локалей хоста (Centos7) в образ python3 docker. На изображении появляются только следующие локали, хотя я использовал предложение, описанное в ссылке ниже:

C
C.UTF-8
POSIX

Почему вместо locale.getpreferredencoding () возвращается 'ANSI_X3.4-1968' из 'UTF-8'?

Мой Dockerfile имеет:

FROM python:3.7.5
ENV LC_ALL C.UTF-8
WORKDIR /data
ADD ./requirements.txt /data/requirements.txt
RUN pip install -r requirements.txt
COPY . /data
CMD [ "python3", "./test.py" ]

Когда я запускаю эту команду:

locale.setlocale(locale.LC_ALL,'ru_RU')

выдает эту ошибку:

Traceback (most recent call last):
      File "./test.py", line 10, in <module>
        locale.setlocale(locale.LC_ALL,'ru_RU')
      File "/usr/local/lib/python3.7/locale.py", line 608, in setlocale
        return _setlocale(category, locale)
    locale.Error: unsupported locale setting

Если я установлю

ENV LANG ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8

Тогда я получу:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
locale.getdefaultlocale ('ru_RU', 'UTF-8')
locale.getpreferredencoding UTF-8
Exception: unsupported locale setting

Пожалуйста, объясните, как я могу добавить локаль ru_RU в изображение python?

1 Ответ

1 голос
/ 08 января 2020

Что бы я сделал для Debian docker image:

FROM python:3.7.5

RUN apt-get update && \
    apt-get install -y locales && \
    sed -i -e 's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales

ENV LANG ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8

и затем в python:

import locale

locale.setlocale(locale.LC_ALL,'ru_RU.UTF-8')
...