[Serie Docker] problema y solución de error de imagen push

1 Descripción del problema

docker push informa este error, blob desconocido

Contenido detallado del error:

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
The push refers to repository [192.******/*******/*************]
3b3341e9d039: Pushing [==================================================>]  12.97MB
abbeacff5fa5: Pushing [==================================================>]   7.68kB
685c55d58372: Pushing [==================================================>]  4.096kB
6d451941e7b1: Pushing   2.56kB
0348644449af: Pushing [===========================>                       ]   15.8MB/28.67MB
4b56765b6b5e: Pushing [==================================================>]  7.168kB
65bc30a63225: Pushing [==================================================>]   5.12kB
6be1b85707bc: Pushing [==================================================>]   2.56kB
1eb3501d2fb4: Waiting 
81d1bb17d85e: Waiting 
5079ade1f5c9: Waiting 
9386262d7a74: Waiting 
unknown blob

2 soluciones

2.1 Problema de posicionamiento

Cuando obtiene errores de "blob desconocido" cuando realiza una inserción de Docker, generalmente significa que faltan algunas capas o blobs en la imagen de Docker.

Hay varias soluciones posibles:

  1. Modifique el archivo daemon.json
  2. Comprobar si existe la imagen de Docker
  3. Comprobar si el Dockerfile es correcto
  4. Borrar caché de Docker
  5. Reconstruir la imagen de Docker
  6. Compruebe las capas de imágenes de Docker

2.2 Opción 1

Si está utilizando la inserción de nombre de dominio, puede modificar el archivo daemon.json y cambiarlo a inserción de intranet, agregandoinsecure-registries 

{
  "insecure-registries": ["my.insecure.registry:5000"]
}

Si necesita conectarse a varios registros de Docker inseguros, agréguelos a la lista de "registros inseguros".

expandir 

insecure-registries Es una de las opciones de configuración del demonio de Docker que permite que el demonio de Docker se conecte al Registro de Docker especificado sin usar TLS u otros protocolos de seguridad.

De forma predeterminada, el demonio de Docker solo permite conexiones al Registro de Docker mediante TLS u otros protocolos seguros.

Tenga en cuenta que  insecure-registries puede haber riesgos de seguridad al usarlo. Se recomienda utilizar la opción solo en un entorno de prueba o desarrollo  insecure-registries , no para un entorno de producción. 

2.3 Esquema 2

1. Comprobar si existe la imagen de Docker

Vea la lista de imágenes de Docker con el siguiente comando:

docker images

```

Si su imagen no aparece en la lista, intente reconstruir la imagen.

2. Comprobar si el Dockerfile es correcto

Asegúrese de que todas las instrucciones del Dockerfile se ejecuten correctamente y que no haya errores tipográficos ni de sintaxis.

3. Borrar caché de Docker

Puede intentar borrar la caché de Docker y reconstruir la imagen de Docker. La caché de Docker se puede borrar con el siguiente comando:

Esto borrará todas las imágenes, contenedores y volúmenes de Docker no utilizados.

docker system prune --all --force --volume

4. Reconstruya la imagen de Docker

Si el problema persiste después de borrar la memoria caché de Docker, puede intentar reconstruir la imagen de Docker:

El siguiente comando reconstruirá la imagen de Docker.

docker build -t <image_name> .

4. Verifique la capa de imagen de Docker

Todas las capas de una imagen de Docker se pueden enumerar con el siguiente comando:

docker inspect <image_name>

Si probó las soluciones anteriores y aún no puede resolver el problema, es posible que deba verificar más el estado de su imagen de Docker y sus capas.

Se puede enumerar un resumen de todas las capas de una imagen de Docker y sus correspondientes blobs con el siguiente comando:

docker inspect <image_name> | grep -i sha256

donde  <image_name> está el nombre o ID de la imagen de Docker para verificar.

La salida contendrá un resumen SHA256 de cada capa, por ejemplo:

"RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:0a8f4a1d34f9d295a0bcf9a7f8c11a4d9a4e5f5b2f2a6b8e6e6b8f8a496f16d5",
                "sha256:0b2c3e1e6f0e3e0d8b7f1c8db67de5a2a3fbc0e3c0d2bb8f1a7b1d2d9a7c4e01",
                "sha256:2b8c7e2fdee9f0d5e6b9a6f5b0c1dd3a309c3826c7c4a31b66c9956179c7f9e5",
                "sha256:9a32d4f6c0c8d1b3b0bca1d6b9e5f6c8e4f75d9b7d4bdc1e2f7f3d0c86c63cbe",
                "sha256:faa9aef3a5244a9a1a406f3df7d1b4a1b7979c0f8d86c533d5ed1e3c8b08c5e4"
            ]
        }

Si falta una capa o un blob, no verá su resumen SHA256 correspondiente. Si realmente le faltan algunas capas o blobs, puede intentar reconstruir la imagen de Docker u obtener las capas o blobs faltantes de otra fuente.

Si usa Docker Registry, puede intentar usar los  garbage-collect comandos del Registro para limpiar huérfanos y blobs en el Registro. Por ejemplo:

docker exec <registry_container_id> bin/registry garbage-collect /etc/docker/registry/config.yml

donde  <registry_container_id> está el ID del contenedor del Registro. garbage-collect El comando limpiará huérfanos y blobs en el Registro y reconstruirá el índice.

si hay 256

Si usa Docker 19.03 o posterior, Docker habilita el algoritmo de resumen de imágenes basado en SHA256 de forma predeterminada. En este caso, puede usar el siguiente comando para enumerar todas las capas de la imagen de Docker y sus resúmenes SHA256 correspondientes:

docker inspect <image_name> --format='{
    
    {json .RootFS.Layers}}' | jq -r '.[]'

donde  <image_name> está el nombre o ID de la imagen de Docker que desea verificar.

Esto generará los resúmenes SHA256 de todas las capas de la imagen de Docker, por ejemplo:

sha256:0a8f4a1d34f9d295a0bcf9a7f8c11a4d9a4e5f5b2f2a6b8e6e6b8f8a496f16d5
sha256:0b2c3e1e6f0e3e0d8b7f1c8db67de5a2a3fbc0e3c0d2bb8f1a7b1d2d9a7c4e01
sha256:2b8c7e2fdee9f0d5e6b9a6f5b0c1dd3a309c3826c7c4a31b66c9956179c7f9e5
sha256:9a32d4f6c0c8d1b3b0bca1d6b9e5f6c8e4f75d9b7d4bdc1e2f7f3d0c86c63cbe
sha256:faa9aef3a5244a9a1a406f3df7d1b4a1b7979c0f8d86c533d5ed1e3c8b08c5e4

Si falta una capa, no verá su resumen SHA256 correspondiente. Si realmente faltan algunas capas, puede intentar reconstruir la imagen de Docker u obtener las capas faltantes de otra fuente.

おすすめ

転載: blog.csdn.net/qq_35133411/article/details/131696597