es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descomprimir no maneja utf-8 en la imagen de Node Alpine Docker: ¿cómo configurar la localidad correcta?

Con este archivo zip, este script de Node genera con éxito los siguientes archivos:

const child_process = require('child_process')
const util = require('util')
const exec = util.promisify(child_process.exec)
exec(`unzip -Z1 metamorpR.zip`).then(zip_contents => {
    if (zip_contents.stderr) {
        throw new Error(`unzip error: ${zip_contents.stderr}`)
    }
    console.log(zip_contents.stdout)
})
metamorpR.z5
Варианты Прохождения.txt
Интерактивная Литература.pdf

Pero cuando ejecuto el script desde Docker, no lo hace.

Utilizando este archivo Dockerfile:

FROM node:16-alpine
RUN apk add --no-cache unzip
COPY . .
ENTRYPOINT ["node", "unzip.js"]

Compilar y ejecutar (sustituir el nombre de la imagen del contenedor):

docker build .
docker run --rm 1dc072

Salida:

metamorpR.z5
??????? ????????.txt
???????????? ??????????.pdf

Creo que esto significa que las locales no están configuradas correctamente dentro de la imagen de Docker. ¿Tienes alguna idea de cómo solucionarlo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Problema

    Cuando se ejecuta el script Node dado dentro de un contenedor Docker, la salida contiene signos de interrogación en lugar de caracteres no latinos. Esto sugiere que la configuración regional en el contenedor Docker no está configurada correctamente.

    Solución

    Para solucionar este problema, se pueden seguir los siguientes pasos:

    1. Actualice el archivo Dockerfile para incluir el paquete libc6-compat, que incluye las bibliotecas necesarias para mostrar correctamente los caracteres no latinos:
      FROM node:16-alpine
      RUN apk add --no-cache unzip libc6-compat
      COPY . .
      ENTRYPOINT ["node", "unzip.js"]
      
    2. Reconstruye la imagen de Docker:
      docker build -t mi-imagen .
      
    3. Ejecute el contenedor Docker pasando la variable de entorno LANG con la configuración regional deseada:
      docker run --rm -e LANG=en_US.UTF-8 mi-imagen
      

      En este ejemplo se utiliza la configuración regional en_US.UTF-8, pero se puede utilizar cualquier configuración regional deseada.

      El script Node actualizado ahora debería mostrar correctamente los caracteres no latinos.

Comments are closed.