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.

NodeJS + Alpine + Puppeteer: No se puede lanzar el navegador sin –no-sandbox.

Estamos intentando ejecutar algunas tareas utilizando puppeteer en Alpine Docker + NodeJS. Solíamos obtener el siguiente error:

Error: ¡No se pudo iniciar el proceso del navegador! spawn /usr/lib/node_modules/puppeteer/.local-chromium/linux-901912/chrome-linux/chrome ENOENT

Aquí está la imagen de Docker actualizada con un usuario no root.

FROM alpine
WORKDIR /project
RUN apk add npm
RUN apk add chromium
RUN npm i puppeteer
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

RUN adduser pptruser –disabled-password && adduser -S -g pptruser wheel \
&& mkdir -p /home/pptruser/Downloads /app \
&& chown -R pptruser:wheel /home/pptruser \
&& chown -R pptruser:wheel /app \
&& chown -R pptruser:wheel /project

USER pptruser

Ahora obtengo un error cuando intento lanzar el contenedor Docker usando el perfil seccomp chrome.json:

Failed to move to new namespace: Se admiten espacios de nombres PID, se admite el espacio de nombres de red, pero falló: errno = Operación no permitida

Consideré intentar con un perfil seccomp personalizado como se sugiere aquí.

¿Hay alguna mejor manera? ¿Como tener algunas variables de tiempo de ejecución para indicarle a Chrome que se ejecute en modo sin sandbox en lugar de usar argumentos de lanzamiento en el código de puppeteer?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una mejor manera de ejecutar Puppeteer en Alpine Docker con NodeJS sin encontrar el error “Failed to move to new namespace”. En lugar de utilizar un perfil de seccomp personalizado, puedes iniciar Chrome con la opción --no-sandbox. Para hacer esto, agrega la siguiente línea a tu Dockerfile:

    ENV CHROME_SANDBOX=/usr/lib/chromium/chrome-sandbox
    

    Luego, modifica la variable de entorno PUPPETEER_EXECUTABLE_PATH para iniciar el ejecutable de Chrome con la opción --no-sandbox:

    ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
        PUPPETEER_EXECUTABLE_ARGS=--no-sandbox
    

    Esto te permitirá iniciar Chrome sin encontrar el error “Failed to move to new namespace” y sin necesidad de un perfil de seccomp personalizado.

    Ten en cuenta que deshabilitar el sandbox puede ser un riesgo de seguridad, así que asegúrate de hacer esto solo si confías en el contenido que estás ejecutando en Chrome.

Comments are closed.