Solución:
Version corta
Pon esto en tu Dockerfile
:
ENV PYTHONIOENCODING=utf-8
o como se menciona en los comentarios anteriores, páselo en la línea de comando:
docker run -e PYTHONIOENCODING=utf-8 my-python-image some-command
Versión larga:
Cuando inicia el intérprete de Python, Python tiene que configurar stdout
para enviar la salida a su terminal. En su sistema operativo moderno, su terminal probablemente informa que es compatible con UTF-8 o alguna otra codificación avanzada. Puede ver qué codificación se usa ejecutando este comando:
$ python -c 'import sys; print(sys.stdout.encoding)'
UTF-8
Cuando ejecuta un contenedor de ventana acoplable, las variables de entorno que Python esperaría usar una codificación más avanzada no están presentes, por lo que Python recurrirá a un conjunto de caracteres básico para garantizar la compatibilidad. Puede verificar esto ejecutando el mismo comando en su contenedor:
$ docker run my-python-image python -c 'import sys; print(sys.stdout.encoding)'
ANSI_X3.4-1968
Cuando pasamos PYTHONIOENCODING
vemos el sys.stdout.encoding
está configurado apropiadamente:
$ docker run -e PYTHONIOENCODING=UTF-8 my-python-image python -c 'import sys; print(sys.stdout.encoding)'
UTF-8
Leer acerca de PYTHONIOENCODING
en la documentación de Python. Esta respuesta también entra en gran detalle sobre la codificación / decodificación y stdout
.
Me encontré con el mismo problema mientras implementaba una aplicación Django con supervisor y gunicorn.
Lo que se solucionó fue agregar la siguiente línea a mi archivo de configuración de supervisor:
environment=LANG="es_ES.utf8", LC_ALL="es_ES.UTF-8", LC_LANG="es_ES.UTF-8"
Para su caso, asegúrese de que la configuración regional china que desea imprimir esté disponible e instalada en su contenedor docker. Este blog describe cómo hacerlo: ejemplo dockerfile (use la configuración regional china en lugar de en_CA.UTF-8):
FROM ubuntu:15.10
MAINTAINER Mobify <[email protected]>
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
con suerte, esto le llevará en la dirección correcta.