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?
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:Luego, modifica la variable de entorno
PUPPETEER_EXECUTABLE_PATH
para iniciar el ejecutable de Chrome con la opción--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.