Fallo al reasignar el espacio de nombres de usuario de Linux con un contenedor de Docker
Detalles
La función de espacio de nombres de usuario (userns) del núcleo de Linux agrega otra capa de seguridad a los contenedores de Linux. Permite a una máquina host ejecutar contenedores fuera del espacio de nombres de ID de usuario (UID) o ID de grupo (GID). Esto significa que todos los contenedores pueden tener una cuenta root (UID 0) en su propio espacio de nombres y ejecutar procesos sin recibir privilegios de usuario root de la máquina host. Cuando se crea userns, el núcleo de Linux proporciona una asignación entre el contenedor y la máquina host. Por ejemplo, si inicia un contenedor y ejecuta un proceso con UID 0 dentro de él (normalmente la cuenta root en el contenedor), el núcleo de Linux asigna el UID 0 del contenedor a un UID sin privilegios de la máquina host. Esto permite que el contenedor ejecute un proceso como si fuera el usuario root, cuando en realidad lo ejecuta el usuario no root en la máquina host.
El error se debe a un fallo de reasignación de userns. Cuando los archivos de la máquina host se configuran con un UID o un GID válido para la reasignación, el UID o el GID debe estar en el rango de 0 a 65535. Cuando un trabajo inicia el contenedor de Docker, Docker extrae una imagen y extrae capas de esa imagen. Si una capa contiene archivos con un UID o un GID fuera del rango aceptado, Docker no se podrá reasignar correctamente y fallará el inicio del contenedor.
Por ejemplo, si existe un archivo con un UID y un GID más altos en el rango permitido. Si copia este archivo en la imagen de Docker, puede mantener el UID y el GID altos.
Si ejecuta la imagen de contenedor y el archivo se debe utilizar en el contenedor, el contenedor fallará.
Solución alternativa 1
Asegúrese de que ninguno de los archivos que se utilicen en la imagen de Docker tengan un UID o un GID alto.
Solución alternativa 2
Si no sabe qué archivo tiene un UID o un GID alto en la imagen, puede buscarlos con:
Introduzca el contenedor con:
Copiar
docker run it <image-name> sh
Busque archivos con un UID/GID alto:
Busque usuarios:
Copiar
find / \( -uid 1000000 \) -ls 2>/dev/null
Busque grupos:
find / \( -gid 1000000 \) -ls 2>/dev/null
El número 1000000 es diferente porque es el error de ID.
Si busca archivos, asegúrese de que el UID o el GID sea más bajo, ya sea en la ubicación donde está almacenado el archivo o en el contenedor.
Solución alternativa 3
En el archivo de Docker, después de copiar los archivos que necesita en la imagen, ejecute una de las siguientes opciones:
En la carpeta:
Copiar
RUN chown -R root:root /root
Directamente en el archivo:
Copiar
RUN chown -R root:root job_logs.py
OSError: [Errno 28] No space left on device 🔗
Detalles
Este error se produce cuando se utiliza un almacenamiento del sistema de archivos local que no está en la ubicación /home/datascience.
En los trabajos, puede especificar el tamaño del almacenamiento de bloques. El almacenamiento de bloques está montado en la carpeta local /home/datascience, que puede utilizar durante la ejecución del trabajo. Tiene un tamaño de almacenamiento igual al tamaño definido por el almacenamiento de bloques antes de la ejecución del trabajo. Si utiliza o crea un directorio fuera de esta ubicación, puede quedarse sin espacio rápidamente y aparecerá el mensaje de error. Depende del tamaño del contenido que se va a almacenar.
Solución alternativa
Asegúrese de que trabaja siempre en la carpeta principal que tiene el tamaño completo del almacenamiento de bloques, que es /home/datascience. Cree, edite y descargue todo el contenido de esta ubicación. Cree directorios en esta ubicación.
Imagen de Docker en Apple y M1 MacBook 🔗
Detalles
Por defecto, Docker en M1 MacBook crea imágenes linux/arm64, que solo funcionan en las máquinas que utilizan la arquitectura ARM. Las máquinas basadas en Intel utilizan la arquitectura AMD. Como resultado, es posible que las imágenes de docker creadas en M1 MacBook no funcionen en máquinas basadas en Intel.