docker - microsoft - azure kubernetes tutorial
¿Cómo configurar la configuración regional dentro de un contenedor Docker de Debian/Ubuntu? (10)
Estoy ejecutando un contenedor Ubuntu Docker. Tengo un teclado noruego y necesito usar caracteres noruegos (øæå).
La codificación de caracteres de mi Terminal está configurada en UTF-8 y estoy conectado a mi contenedor mediante SSH. Sin embargo, no puedo escribir caracteres noruegos, ni copiar y pegar caracteres noruegos, ni usar CTL + SHIFT + U + 00f8.
Lo intenté:
locale-gen nb_NO.UTF-8
Pero nada ha cambiado. ¿Cómo configuro la configuración regional y el teclado dentro de un contenedor Docker?
Aquellos que usan Debian también tienen que instalar el paquete
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
Esta answer me ayudó mucho.
Consejo: explore los foros de documentación de contenedores, como el foro Docker .
Aquí hay una solución para debian y ubuntu , agregue lo siguiente a su Dockerfile:
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* /
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
De hecho, sufrí el mismo problema, pero ninguna de las respuestas proporcionadas funciona al 100% con Debian: lo último, incluso si proporcionan buenas pistas.
La mayor diferencia es que debe asegurarse de que tanto las configuraciones regionales como las locales estén instaladas, esta última ya contiene en_US.UTF-8, por lo que no tiene que generarla con local-gen o dpkg-reconfigure .
Esto es lo que he hecho en mi Dockerfile para que funcione:
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
En lugar de restablecer la configuración regional después de la instalación del paquete de configuraciones regionales, puede responder las preguntas que normalmente se le formularían (que está inhabilitado por la
noninteractive
de
noninteractive
) antes de instalar el paquete para que los scripts del paquete configuren la configuración regional correctamente, este ejemplo establece la configuración regional en inglés (Británico, 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
Especifique las variables de entorno
LANG
y
LC_ALL
usando
-e
cuando ejecute su comando:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
No es necesario modificar el Dockerfile.
La answer @ Mixel funcionó muy bien para la imagen de acoplador basada en Ubuntu que tenemos.
Sin embargo, también tenemos una imagen de acoplador basada en centos para probar recetas a través del chef (utilizando el controlador de
kitchen-docker
).
Uno de los paquetes que preinstalamos no se pudo instalar debido a que no se configuró la configuración regional.
Para instalar una configuración regional, tuve que ejecutar lo siguiente:
localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8
Obtuve esta información de esta respuesta en ServerFault .
Después de ejecutar los comandos anteriores como parte de la ventana acoplable aprovisionando el paquete instalado sin ningún error.
De
.kitchen.yml
:
platforms:
- name: centos7
driver_config:
image: #(private image)
platform: centos
provision_command:
- localedef -c -f UTF-8 -i en_US en_US.UTF-8
- export LC_ALL=en_US.UTF-8
No me gusta tener variables de entorno de Docker cuando no espero que el usuario de una imagen de Docker las cambie.
Simplemente colóquelo en algún lugar de una
RUN
.
Si no tiene las configuraciones regionales UTF-8 generadas, puede hacer el siguiente conjunto de comandos:
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* /
&& locale-gen "en_US.UTF-8"
ENV LANG=en_US.UTF-8 /
LANGUAGE=en_US:en /
LC_ALL=en_US.UTF-8
Ponga en su Dockerfile algo adaptado de
# 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
esto se extrae de la muy buena publicación sobre ese tema, de
Solo agrega
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
en tu Dockerfile.
No se necesita nada más para la operación básica.
Mientras tanto,
locale-gen
no acepta ningún argumento, es por eso que ninguna de las ''soluciones'' que lo usan funcionan.
Ustedes no necesitan esas cosas complejas para establecer configuraciones regionales en Ubuntu / Debian.
Ni siquiera necesita el archivo
/etc/local.gen
.
Simplemente
locale-gen
hará todo y el autor solo se perdió el paquete de
locales
.
RUN echo locales locales/default_environment_locale select en_GB.UTF-8 | debconf-set-selections
RUN echo locales locales/locales_to_be_generated select "en_GB.UTF-8 UTF-8" | debconf-set-selections
RUN /
apt-get update && /
DEBIAN_FRONTEND=noninteractive apt-get install -y locales && /
rm -rf /var/lib/apt/lists/*
Esto me pareció el más simple y efectivo. Confirmo que funciona en Ubuntu 16.04.