En k3s el motor de contenedores que viene por defecto no es Docker, sino containerd. Esto significa que los comandos de toda la vida como docker images o docker rmi no sirven aquí. Si los ejecutas, te encontrarás con errores crípticos o, peor aún, con un silencio absoluto que no te dice nada.
Para hablar con el almacenamiento de imágenes del nodo tienes dos opciones: ctr, la CLI nativa de containerd, o crictl, la CLI alineada con la CRI de Kubernetes. Entre las dos, crictl es la recomendada en entornos k3s, porque es la que entiende Kubernetes y la que vas a usar para depurar pods, contenedores y demás.
1. Ver las imágenes descargadas
Para listar todas las imágenes que el nodo tiene en disco, ejecuta:
sudo crictl images
Si por alguna razón crictl no encuentra el socket de containerd de forma automática, pasa el flag --runtime-endpoint de forma explícita:
sudo crictl --runtime-endpoint unix:///run/k3s/containerd/containerd.sock images
2. Borrar una imagen concreta
Para eliminar una imagen, usa rmi seguido de su ID o de su nombre completo (Repository:Tag):
sudo crictl rmi <ID_O_NOMBRE_DE_LA_IMAGEN>
Por ejemplo, si al listar ves la imagen docker.io/library/nginx:alpine con el ID sha256:cb100..., puedes borrarla de cualquiera de estas dos formas:
sudo crictl rmi docker.io/library/nginx:alpinesudo crictl rmi sha256:cb100...
Las dos son equivalentes. Yo tiendo a usar el nombre completo porque es más legible cuando estoy revisando logs o scripts antiguos, pero el ID es más fiable si la misma imagen tiene varios tags.
3. Limpieza general de imágenes huérfanas
Si lo que quieres es recuperar espacio en disco de un plumazo, eliminando todas las imágenes que no esté usando ningún pod activo, lanza:
sudo crictl rmi --prune
El flag --prune recorre la lista, mira qué pods están corriendo, y borra solo lo que ningún pod referencia. Es la forma segura de hacer limpieza masiva: no te va a eliminar una imagen que esté sosteniendo un despliegue en producción.