Intereting Posts
Запустите мастер Дженкинса и раб с Докером /var/run/docker.sock: разрешение отклонено во время работы докеры в скрипте CGI Python Как я могу настроить docker на вытягивание изображений только из моего личного репозитория вместо docker.io? Неправильные разрешения в объеме в контейнере Docker файл postgresql.conf по умолчанию из docker Дженкинс-узел в качестве докер-контейнера cadvisor, elasticsearch, docker: нет доступных узлов Elasticsearch Aldryn облако на окнах 10, используя гипер-v и докер 1.12 rc2 beta16 Как бы я смонтировал AWS EC2 Container Service захват изображения докеры из частного репо на Docker Hub с использованием Cloud Formation? Правильный способ выполнения сценария wait-for-it в docker-compose Исключение памяти VirtualBox – std :: bad_alloc с использованием TensorFlow и Docker Могу ли я настроить ECS для автоматической очистки старого контейнера из моих экземпляров EC2? Выход контейнера докера (0) при использовании команды запуска докеров, но работает с командой запуска докера Малиновый pi zero Docker не может запустить контейнер Изображение Докера для файла докеров

Docker Python устанавливает utf-8 locale

Я пытаюсь запустить мой файл python, который сначала читает строку на китайском языке и печатает ее.

Это мой файл докеров

FROM python:2.7-onbuild ENV LANG en_US.UTF-8 ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"] 

Это мой файл python:

  # -*- coding: utf-8 -*- import jieba s = "我来到北京清华大学" s = s.decode('utf-8') print type(s), s 

Затем я запускаю:

docker build -t python-example .

docker run python-example

Ошибка, которую я получил: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)

Когда я запускаю его локально, он работает нормально.

    Я столкнулся с тем же вопросом, когда я развертывал приложение Django с супервизором и стрельбой.

    Исправлено: добавить следующую строку в конфигурационный файл диспетчера:

     environment=LANG="es_ES.utf8", LC_ALL="es_ES.UTF-8", LC_LANG="es_ES.UTF-8" 

    Для вашего случая убедитесь, что китайский язык, который вы хотите распечатать, доступен и установлен в контейнере докера. В этом блоге описывается, как это сделать: пример dockerfile (используйте китайский язык вместо en_CA.UTF-8):

     FROM ubuntu:15.10 MAINTAINER Mobify <ops@mobify.com> RUN apt-get -qq update && \ apt-get -q -y upgrade && \ apt-get install -y sudo curl wget locales && \ rm -rf /var/lib/apt/lists/* # Ensure that we always use UTF-8 and with Canadian English locale RUN locale-gen en_CA.UTF-8 COPY ./default_locale /etc/default/locale RUN chmod 0755 /etc/default/locale ENV LC_ALL=en_CA.UTF-8 ENV LANG=en_CA.UTF-8 ENV LANGUAGE=en_CA.UTF-8 

    надеюсь, это приведет вас в правильном направлении.

    Укороченная версия

    Поместите это в свой Dockerfile :

     ENV PYTHONIOENCODING=utf-8 

    или, как указано в комментариях выше, передать его в командной строке:

     docker run -e PYTHONIOENCODING=utf-8 my-python-image some-command 

    Длинная версия:

    Когда вы запускаете интерпретатор Python, Python должен настроить stdout для отправки вывода на ваш терминал. На вашем современном O / S ваш терминал, вероятно, сообщает, что он поддерживает UTF-8 или какую-либо другую расширенную кодировку. Вы можете узнать, какая кодировка используется при выполнении этой команды:

     $ python -c 'import sys; print(sys.stdout.encoding)' UTF-8 

    Когда вы запускаете контейнер докеров, переменные среды Python ожидали бы использовать более совершенную кодировку, и поэтому Python вернется к базовому набору символов для обеспечения совместимости. Вы можете проверить это, выполнив ту же команду в своем контейнере:

     $ docker run my-python-image python -c 'import sys; print(sys.stdout.encoding)' ANSI_X3.4-1968 

    Когда мы передаем PYTHONIOENCODING мы видим, что sys.stdout.encoding устанавливается соответствующим образом:

     $ docker run -e PYTHONIOENCODING=UTF-8 my-python-image python -c 'import sys; print(sys.stdout.encoding)' UTF-8 

    Читайте о PYTHONIOENCODING в документации Python . Этот ответ также содержит подробные сведения о кодировании / декодировании и stdout .