En esta página, se describe cómo solucionar los problemas que puedes encontrar mientras usas Cloud Run.
Verifica si hay problemas existentes o abre problemas nuevos en las herramientas públicas de seguimiento de errores.
Para otros mensajes de error que no aparecen en esta página, consulta Problemas conocidos de Cloud Run.
Errores en la implementación
En esta sección, se describen los errores de implementación comunes en Cloud Run y los métodos para solucionarlos.
No se pudo iniciar el contenedor
El siguiente error ocurre cuando intentas realizar una implementación:
Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.
Para resolver el problema, sigue estos pasos:
Verifica que puedas ejecutar la imagen de contenedor de forma local. Si la imagen de tu contenedor no se puede ejecutar de forma local, primero debes diagnosticar y solucionar el problema de forma local.
Verifica si el contenedor está escuchando solicitudes en el puerto correcto. Tu contenedor debe detectar las solicitudes entrantes en el puerto que define Cloud Run y que se proporciona en la variable de entorno
PORT
. Para obtener instrucciones sobre cómo especificar el puerto,consulta Configura contenedores para servicios.Verifica si el contenedor escucha en todas las interfaces de red, que suelen denominarse
0.0.0.0
. En particular, tu contenedor no debería escuchar en127.0.0.1
.Verifica que la imagen de contenedor se compile para Linux de 64 bits según lo requiere el contrato de entorno de ejecución de contenedores.
Usa Cloud Logging para buscar errores de aplicación en los registros
stdout
ostderr
. También puedes buscar fallas capturadas en Error Reporting.Es posible que debas actualizar el código o la configuración de revisión para corregir errores o fallas. También puedes solucionar problemas de tu servicio de forma local.
Error de importación de contenedores
El siguiente error ocurre cuando intentas realizar una implementación:
The service has encountered an error during container import. Please try again later. Resource readiness deadline exceeded.
Para resolver el problema, sigue estos pasos:
Asegúrate de que el sistema de archivos del contenedor no contenga caracteres que no sean utf8.
Algunas imágenes de Docker basadas en Windows usan capas externas. El plano de control de Cloud Run no admite capas externas. Para resolver este problema, intenta configurar la marca
--allow-nondistributable-artifacts
en el daemon de Docker.
La función no es compatible
El siguiente error ocurre cuando llamas a la API de Cloud Run Admin:
The feature is not supported in the declared launch stage
Este error se produce cuando llamas directamente a la API de Cloud Run Admin y usas una función beta sin especificar una anotación o un campo de etapa de lanzamiento.
Para resolver este problema, agrega el campo de etapa de lanzamiento a las solicitudes.
Consulta los siguientes ejemplos para agregar referencias de etapa de lanzamiento cuando uses la API de REST v1 o v2:
Anotación de etapa de lanzamiento a una solicitud del cliente con JSON y la API de REST v1:
"annotations": { "run.googleapis.com/launch-stage": "BETA" }
Referencia de LaunchStage a una solicitud del cliente con JSON y la API de REST v2:
"launchStage": "BETA"
Anotaciones de etapa de lanzamiento a una solicitud de servicio con YAML y la API de REST v1:
kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA
No se encontró el usuario root
El siguiente error se produce cuando las claves de encriptación administradas por el cliente se especifican con un parámetro --key
:
ERROR: "User \"root\""not found in /etc/passwd
Para resolver este problema, especifica USER 0
en lugar de USER root
en el Dockerfile.
Se borra la cuenta de servicio predeterminada de Compute Engine
El siguiente error ocurre durante la implementación:
ERROR: (gcloud.run.deploy) User EMAIL_ADDRESS does not have permission to access namespace NAMESPACE_NAME (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
Este problema ocurre en una de las siguientes situaciones:
La cuenta de servicio predeterminada de Compute Engine no existe en el proyecto y no se especifica ninguna cuenta de servicio con la marca
--service-account
al momento de la implementación.El desarrollador o principal que implementa el servicio no tiene los permisos necesarios para implementar la cuenta de servicio predeterminada de Compute Engine.
Para solucionar este problema, sigue estos pasos:
Especifica una cuenta de servicio con la marca
--service-account
:gcloud run services update SERVICE_NAME --service-account SERVICE_ACCOUNT
Verifica que la cuenta de servicio que especifiques tenga los permisos necesarios para implementar.
Para verificar si el agente de servicio predeterminado de Compute Engine existe en tu proyecto de Google Cloud, sigue estos pasos:
En la consola de Google Cloud, ve a la página Permisos de la administración de identidades y accesos:
Selecciona la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google.
En la lista Principales, busca el ID del agente de servicio de Compute Engine, que sigue el formato
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Problemas con la cuenta de servicio de Cloud Build
El siguiente error se produce durante las implementaciones de origen cuando la cuenta de servicio de Cloud Build no tiene los permisos necesarios o está inhabilitada:
ERROR: (gcloud.run.deploy) NOT_FOUND: Build failed. The service has encountered an internal error. Please try again later. This command is authenticated as EMAIL_ADDRESS which is the active account specified by the [core/account] property.
Cloud Build cambió el comportamiento predeterminado de la forma en que Cloud Build usa cuentas de servicio en proyectos nuevos. Esto se detalla en Cambio de la cuenta de servicio predeterminada de Cloud Build. Como resultado de este cambio, es posible que los proyectos nuevos que se implementen en Cloud Run desde el código fuente por primera vez usen una cuenta de servicio predeterminada de Cloud Build con permisos insuficientes para la implementación desde la fuente.
Para resolver el problema, sigue estos pasos:
Revisa la guía de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y, también, inhabilita estos cambios.
Otorga el rol de Creador de Cloud Run (
roles/run.builder
) a la cuenta de servicio de compilación.
El agente de servicio de Cloud Run no tiene permiso para leer la imagen
El siguiente error ocurre cuando intentas implementar desde un proyecto con una imagen que se almacena en Artifact Registry, con el dominio gcr.io
en un proyecto diferente:
Google Cloud Run Service Agent must have permission to read the image, gcr.io/PROJECT-ID/IMAGE-NAME. Ensure that the provided container image URL is correct and that above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that PROJECT-ID/IMAGE-NAME is not in project PROJECT-ID-2. Permission must be granted to the Google Cloud Run Service Agent from this project.
También es posible que veas el siguiente error cuando intentes implementar desde un proyecto mediante una imagen que se almacena en Artifact Registry en un proyecto diferente:
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: User must have permission to read the image, REGION.pkg.dev/PROJECT_ID/ARTIFACT_REGISTRY_REPO/IMAGE:latest. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project PROJECT_ID, which is not the same as this project PROJECT_ID.
Para resolver este problema, sigue estas recomendaciones:
Sigue las instrucciones para implementar imágenes de contenedores de otros Google Cloud proyectos a fin de asegurarte de que las principales tengan los permisos necesarios.
Este problema también puede ocurrir si el proyecto está en un perímetro de Controles del servicio de VPC con una restricción en la API de Cloud Storage que prohíbe las solicitudes del agente de servicio de Cloud Run. Para solucionar este problema, haz lo siguiente:
Abre el Explorador de registros en la consola de Google Cloud. (No uses la página Registros dentro de la página de Cloud Run):
Ingresa el siguiente texto en el campo de consulta:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" severity=ERROR protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS" protoPayload.authenticationInfo.principalEmail="service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com"
Si ves entradas de registro después de usar esta consulta, examina las entradas de registro para determinar si necesitas actualizar tus políticas de Controles de servicio de VPC. Pueden indicar que necesitas agregar
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
a una política de acceso preexistente.
Faltan permisos para las implementaciones de origen
Los siguientes errores pueden ocurrir cuando se implementa desde la fuente:
ERROR: (gcloud.run.deploy) EMAIL_ADDRESS does not have permission to access namespaces instance PROJECT_ID (or it may not exist): Google Cloud Run Service Agent does not have permission to get access tokens for the service account SERVICE_ACCOUNT. Please give SERVICE_ACCOUNT permissioniam.serviceAccounts.getAccessToken
on the service account. Alternatively, if the service account is unspecified or in the same project you are deploying in, ensure that the Service Agent is assigned the Google Cloud Run Service Agent roleroles/run.serviceAgent
. This command is authenticated as EMAIL_ADDRESS, which is the active account specified by the [core/account] property.
Cada servicio de Cloud Run está asociado con una cuenta de servicio que funciona como su identidad cuando el servicio accede a otros recursos. Esta cuenta de servicio
puede ser la cuenta de servicio predeterminada (PROJECT_NUMBER-compute@developer.gserviceaccount.com
) o una cuenta de servicio administrada por el usuario.
En entornos en los que varios servicios acceden a diferentes recursos, puedes usar identidades por servicio con diferentes cuentas de servicio administradas por el usuario en lugar de la cuenta de servicio predeterminada.
Para resolver este problema, otorga a la cuenta del implementador el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en la cuenta de servicio que se usa como identidad del servicio.
Este rol predefinido contiene el permiso iam.serviceAccounts.actAs
, que se requiere para conectar una cuenta de servicio al servicio o la revisión. Un usuario que crea una cuenta de servicio administrada por el usuario recibe automáticamente el permiso iam.serviceAccounts.actAs
. Sin embargo, el usuario que crea la cuenta de servicio administrada por el usuario debe otorgar este permiso a otros implementadores.
Para obtener más información sobre los requisitos de acceso de las cuentas de servicio nuevas que crees, consulta Obtén recomendaciones para crear cuentas de servicio dedicadas.
El usuario no tiene permisos suficientes para completar las implementaciones de origen
El siguiente error se produce cuando a la cuenta del implementador le faltan los permisos necesarios en tu proyecto:
ERROR: (gcloud.run.deploy) 403 Could not upload file EMAIL_ADDRESS does not havestorage.objects.create
access to the Google Cloud Storage object. Permissionstorage.objects.create
denied on resource (or it may not exist). This command is authenticated as EMAIL_ADDRESS which is the active account.
Para resolver este error, pídele a tu administrador que te otorgue los siguientes roles de Identity and Access Management:
Desarrollador de origen de Cloud Run(
roles/run.sourceDeveloper
) en tu proyectoUsuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad del servicio de Cloud Run Para obtener más información, consulta Permisos de implementación.
Entrega errores
En esta sección, se enumeran los errores que puedes encontrar al entregar y se proporcionan sugerencias para solucionarlos.
HTTP 401: El cliente no se autenticó correctamente
El siguiente error ocurre durante la entrega:
The request was not authorized to invoke this service
Para solucionar este problema, sigue estos pasos:
Si la invoca una cuenta de servicio, la reclamación del público (
aud
) del token de ID firmado por Google se debe establecer en lo siguiente:- La URL de Cloud Run del servicio receptor, con el formato
https://service-xyz.run.app
.- El servicio de Cloud Run debe requerir autenticación.
- El servicio de Cloud Run se puede invocar a través de la URL de Cloud Run o de una URL del balanceador de cargas.
- El ID de cliente de OAuth 2.0 con el tipo de aplicación web, con el formato
nnn-xyz.apps.googleusercontent.com
.- El servicio de Cloud Run se puede invocar a través de un balanceador de cargas HTTPS protegido con IAP.
- Esto es ideal para un GCLB respaldado por varios servicios de Cloud Run en diferentes regiones.
- Un público personalizado configurado con los valores exactos proporcionados. Por ejemplo, si el público personalizado es
service.example.com
, el valor de la reclamación del público (aud
) también debe serservice.example.com
. Si el público personalizado eshttps://service.example.com
, el valor de la reclamación del público también debe serhttps://service.example.com
.
- La URL de Cloud Run del servicio receptor, con el formato
Es posible que se produzca un error
401
en las siguientes situaciones debido a un formato de autorización incorrecto:El token de autorización usa un formato no válido.
El encabezado de autorización no es un token web JSON (JWT) con una firma válida.
El encabezado de autorización contiene varios JWT.
Hay varios encabezados de autorización en la solicitud.
Para verificar las reclamaciones en un JWT, usa la herramienta jwt.io.
Es posible que se produzca un error
403
cuando al miembro de IAM que se usó para generar el token de autorización le falte el permisorun.routes.invoke
.Cuando usas el servidor de metadatos para recuperar tokens de ID y de acceso a fin de autenticar solicitudes con el servicio de Cloud Run o la identidad de trabajo con un proxy HTTP para enrutar el tráfico de salida, y obtienes tokens no válidos, asegúrate de agregar los siguientes hosts a las excepciones de proxy HTTP:
169.254.*
o169.254.0.0/16
*.google.internal
Este error suele ocurrir cuando las bibliotecas cliente de Cloud usan el servidor de metadatos para recuperar las credenciales predeterminadas de la aplicación para autenticar invocaciones de REST o gRPC. Si no defines las excepciones de proxy HTTP, los siguientes resultados del comportamiento se mostrarán:
Si el servicio o trabajo de Cloud Run y el proxy HTTP se alojan en cargas de trabajo Google Cloud diferentes, incluso si las Google Cloud bibliotecas cliente pueden obtener credenciales, los tokens se generan para la cuenta de servicio asignada a la carga de trabajo del proxy HTTP, que podría no tener los permisos necesarios para realizar las operaciones de la API deGoogle Cloud previstas. En este caso, los tokens se recuperan desde la vista del servidor de metadatos de la carga de trabajo del proxy HTTP, en lugar de la de Cloud Run.
Si el proxy HTTP no se aloja en Google Cloud y las solicitudes del servidor de metadatos se enrutan mediante el proxy, las solicitudes de tokens fallarán y las operaciones de las APIs deGoogle Cloud se anularán.
HTTP 403: El cliente no está autorizado a invocar o llamar al servicio
El siguiente error puede o no estar en Cloud Logging con resource.type = “cloud_run_revision”:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header
El siguiente error está presente en la respuesta HTTP que se mostró al cliente:
403 Forbidden Your client does not have permission to get URL from this server.
Para resolver este problema cuando el error resource.type = "cloud_run_revision" está presente:
- Si se pretende que cualquiera pueda invocar el servicio, actualiza su configuración de IAM para que el servicio sea público.
- Si se pretende que solo determinadas identidades puedan invocar el servicio, asegúrate de invocarlo con el token de autorización adecuado.
- Si es invocado por un desarrollador o es invocado por un usuario final: Asegúrate de que el desarrollador o el usuario tengan el permiso
run.routes.invoke
, que puedes proporcionar a través de los roles Administrador de Cloud Run (roles/run.admin
) e Invocador de Cloud Run (roles/run.invoker
). - Si la invoca una cuenta de servicio: Asegúrate de que la cuenta de servicio sea miembro del servicio de Cloud Run y que tenga el rol Invocador de Cloud Run (
roles/run.invoker
). - Las llamadas a las que les falta un token de autenticación o con un token de autenticación que tiene un formato válido, pero en las que el miembro de IAM que se usó para generar el token no tiene el permiso
run.routes.invoke
, genera este error403
.
- Si es invocado por un desarrollador o es invocado por un usuario final: Asegúrate de que el desarrollador o el usuario tengan el permiso
Para resolver este problema cuando el error resource.type = "cloud_run_revision" no está presente:
- Se puede mostrar un código de estado 403 cuando un servicio tiene la entrada configurada en
All
, pero se bloqueó debido a los Controles del servicio de VPC. Consulta la siguiente sección sobre errores 404 para obtener más información sobre la solución de problemas de denegación de los Controles del servicio de VPC.
HTTP 403: Error al acceder al servicio desde un navegador web
El siguiente problema ocurre cuando accedes a un servicio de Cloud Run desde un navegador web:
403 Forbidden
Your client does not have permission to get URL from this server.
Cuando invocas un servicio de Cloud Run desde un navegador web, este envía una solicitud GET
al servicio. Sin embargo, la solicitud no contiene el token de autorización del usuario que realiza la llamada. Para resolver este problema, elige una de las siguientes soluciones:
Usa Identity-Aware Proxy (IAP) con Cloud Run. IAP te permite establecer una capa de autorización central para las aplicaciones a las que se accede a través de HTTPS. Con IAP, puedes usar un modelo de control de acceso a nivel de la aplicación en lugar de firewalls a nivel de red. Para obtener más detalles sobre la configuración de Cloud Run con IAP, consulta Habilita Identity-Aware Proxy para Cloud Run.
Como solución alternativa temporal, puedes acceder a tu servicio a través de un navegador web con el proxy de Cloud Run en Google Cloud CLI. Puedes usar un proxy de un servicio de forma local con lo siguiente:
gcloud run services proxy SERVICE --project PROJECT-ID
Después de ejecutar este comando, Cloud Run envía mediante proxy el servicio privado a
http://localhost:8080
(o al puerto que especifiques con--port
) y proporciona el token de la cuenta activa o cualquier otro token que especifiques. Esta es la forma recomendada de probar de manera privada un sitio web o una API en el navegador. Para obtener más información, consulta Cómo probar servicios privados.Permite invocaciones no autenticadas a tu servicio. Esto es útil para realizar pruebas o cuando tu servicio es una API pública o un sitio web.
HTTP 404: No encontrado
El siguiente problema ocurre durante la entrega:
Se produce un error HTTP 404
.
Para solucionar este problema, sigue estos pasos:
Verifica que la URL que solicitas sea correcta. Para ello, verifica la página de detalles del servicio en la consola de Google Cloud o ejecuta el siguiente comando:
gcloud run services describe SERVICE_NAME | grep URL
Inspecciona dónde es posible que la lógica de tu aplicación muestre códigos de error
404
. Si la app muestra el404
, será visible en Cloud Logging.Asegúrate de que la app no comience a escuchar en el puerto configurado antes de poder recibir solicitudes.
Verifica que la app no muestre un código de error
404
cuando la ejecutes de forma local.
Se muestra una 404
cuando la configuración de entrada del servicio de Cloud Run está configurada como “Interno” o “Interno y Cloud Load Balancing”, y una solicitud no cumple con los requisitos la restricción de red especificada. Esto también puede ocurrir si la URL run.app
predeterminada del servicio de Cloud Run está inhabilitada y un cliente intenta conectarse al servicio en esa URL run.app
. En cualquier caso, la solicitud no llega al contenedor y 404
no está presente en Cloud Logging con el siguiente filtro:
resource.type="cloud_run_revision"
log_name="projects/PROJECT_ID/logs/run.googleapis.com%2Frequests"
httpRequest.status=404
Con la misma configuración de entrada, es posible que los Controles del servicio de VPC bloqueen la solicitud según el contexto del emisor, incluidos el proyecto y la dirección IP. Para verificar si hay un incumplimiento de la política de los Controles del servicio de VPC, haz lo siguiente:
Abre el explorador de registros en la consola de Google Cloud (no la página Registros en Cloud Run):
Ingresa el siguiente texto en el campo de consulta:
resource.type="audited_resource" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy" resource.labels.method="run.googleapis.com/HttpIngress"
Si ves entradas de registro después de usar esta consulta, examina las entradas de registro para determinar si necesitas actualizar las políticas de los Controles del servicio de VPC.
También es posible que veas un error 404
cuando accedas a tu
extremo de servicio con un balanceador de cargas mediante el entorno de ejecución de Python. Para resolver este problema, verifica la máscara de URL de tu balanceador de cargas y asegúrate de que la ruta de URL que especifiques para el balanceador de cargas coincida con la ruta de tu código fuente de Python.
HTTP 429: No hay instancias de contenedor disponibles
El siguiente error ocurre durante la entrega:
HTTP 429 The request was aborted because there was no available instance. The Cloud Run service might have reached its maximum container instance limit or the service was otherwise not able to scale to incoming requests. This might be caused by a sudden increase in traffic, a long container startup time or a long request processing time.
Para resolver este problema, verifica la métrica “Recuento de instancias de contenedor” en tu servicio y considera aumentar este límite si tu uso se acerca al máximo. Consulta Configuración de “instancias máximas” y, si necesitas más instancias, solicita un aumento de la cuota.
HTTP 500: Cloud Run no pudo administrar la tasa de tráfico
El siguiente error ocurre durante la entrega y también puede ocurrir cuando el servicio no alcanzó su límite máximo de instancias de contenedor:
HTTP 500 The request was aborted because there was no available instance
Este error puede deberse a uno de los siguientes problemas:
- Un gran incremento repentino del tráfico.
- Un tiempo de inicio en frío largo.
- Un tiempo largo de procesamiento de la solicitud o un aumento repentino en el tiempo de procesamiento de la solicitud.
- El servicio alcanza su límite máximo de instancias de contenedor (
HTTP 429
). - Factores transitorios atribuidos al servicio de Cloud Run.
Para solucionar este problema, resuelve los problemas mencionados anteriormente.
Además de solucionar estos problemas, como solución alternativa, puedes implementar una retirada exponencial y reintentos para las solicitudes que el cliente no debe descartar.
Ten en cuenta que un aumento corto y repentino en el tráfico o el tiempo de procesamiento de las solicitudes solo puede ser visible en Cloud Monitoring si te acercas a una resolución de 10 segundos.
Cuando la causa raíz del problema es un período de errores transitorios elevados que solo se pueden atribuir a Cloud Run, puedes comunicarte con el equipo de asistencia.
HTTP 501: La operación no está implementada
El siguiente error ocurre durante la entrega:
HTTP 501
Operation is not implemented, or supported, or enabled.
Este problema ocurre cuando especificas un REGION incorrecto mientras invocas
tu trabajo de Cloud Run. Por ejemplo, este error puede ocurrir
cuando implementas un trabajo en la región asia-southeast1
y lo invocas
con southeast1-asia
o asia-southeast
. Para obtener la lista de las regiones compatibles, consulta Ubicaciones de Cloud Run.
HTTP 503: No se encontraron las credenciales predeterminadas
El siguiente error ocurre durante la entrega:
HTTP 503
System.InvalidOperationException System.InvalidOperationException your Default
credentials were not found.
Este problema se produce cuando tu aplicación no se autentica correctamente debido a que faltan archivos, hay rutas de acceso de credenciales no válidas o hay asignaciones incorrectas de variables de entorno.
Para solucionar este problema, sigue estos pasos:
Configura las credenciales predeterminadas de la aplicación (ADC) con las credenciales asociadas con tu Cuenta de Google. Configura ADC con lo siguiente:
gcloud auth application-default login
Aparecerá una pantalla de acceso. Después de acceder, tus credenciales se almacenan en el archivo de credenciales local que usa ADC.
Usa la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
para proporcionar la ubicación de un archivo JSON de credenciales dentro de tu Google Cloud proyecto.
Para obtener más información, consulta Configura credenciales predeterminadas de la aplicación.
HTTP 500 / HTTP 503: Las instancias de contenedor exceden los límites de memoria
El siguiente error ocurre durante la entrega:
En Cloud Logging:
While handling this request, the container instance was found to be using too much memory and was terminated. This is likely to cause a new container instance to be used for the next request to this revision. If you see this message frequently, you may have a memory leak in your code or may need more memory. Consider creating a new revision with more memory.
Para solucionar este problema, sigue estos pasos:
- Determina si las instancias de contenedor exceden la memoria disponible.
Busca errores relacionados en los registros
varlog/system
. - Si las instancias exceden la memoria disponible, considera aumentar el límite de memoria.
Ten en cuenta que en Cloud Run, los archivos escritos en el sistema de archivos local se consideran en la memoria disponible. Esto también incluye cualquier archivo de registro que se escriba en ubicaciones distintas de /var/log/*
y /dev/log
.
HTTP 503: Respuesta con formato incorrecto o problema de conexión de la instancia de contenedor
Uno de los siguientes errores ocurre durante la entrega:
HTTP 503 The request failed because either the HTTP response was malformed or connection to the instance had an error.
Para resolver este problema, sigue estas recomendaciones:
Verifica Cloud Logging Usa Cloud Logging para buscar errores de memoria insuficiente en los registros. Si ves mensajes de error relacionados con las instancias de contenedores que superan los límites de memoria, sigue las recomendaciones para resolver este problema.
Tiempos de espera a nivel de app Si las solicitudes terminan con el código de error
503
antes de que se alcance el tiempo de espera de la solicitud establecido en Cloud Run, es posible que debas actualizar la configuración del tiempo de espera de la solicitud para tu framework de lenguaje:- Es posible que los desarrolladores de Node.js necesiten actualizar la propiedad
server.timeout
a través deserver.setTimeout
(usaserver.setTimeout(0)
para lograr un tiempo de espera ilimitado), según la versión que usas. [CRITICAL] WORKER TIMEOUT
Los desarrolladores de Python deben actualizar el tiempo de espera predeterminado de Gunicorn.
- Es posible que los desarrolladores de Node.js necesiten actualizar la propiedad
Cuello de botella de la red descendente: En algunas instancias, un código de error
503
puede dar como resultado un cuello de botella en la red descendente, por ejemplo, durante las pruebas de carga. Por ejemplo, si tu servicio enruta el tráfico a través de un conector de Acceso a VPC sin servidores, asegúrate de que el conector no haya superado su límite de capacidad de procesamiento mediante estos pasos:Abre el Acceso a VPC sin servidores en la consola de Google Cloud:
Verifica si hay barras red en el histograma del gráfico de capacidad de procesamiento. Si hay una barra roja, considera aumentar el número máximo de instancias o el tipo de instancia que usa tu conector. De forma alternativa, comprime el tráfico enviado a través de un conector de Acceso a VPC sin servidores.
Límite de solicitudes entrantes a un solo contenedor Hay un problema conocido en el que hay porcentajes de solicitudes altos por contenedor que generan este error
503
. Si una instancia de contenedor recibe más de 800 solicitudes por segundo, los sockets TCP disponibles se pueden agotar. Para solucionar este problema, prueba alguna de las siguientes opciones:Activa HTTP/2 para el servicio y realiza los cambios necesarios en el servicio para que sea compatible con HTTP/2.
Evita enviar más de 800 solicitudes por segundo a una sola instancia de contenedor mediante la disminución de la simultaneidad configurada. Usa la siguiente ecuación para obtener una estimación del porcentaje de solicitudes por instancia de contenedor:
requests/sec/container_instance ~= concurrency * (1sec / median_request_latency)
HTTP 503: No se pueden procesar algunas solicitudes debido a la alta configuración de simultaneidad
Los siguientes errores ocurren durante la entrega:
HTTP 503 The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit.
Este problema se produce cuando las instancias de contenedor usan mucha CPU para procesar las solicitudes y, como resultado, las instancias de contenedor no pueden procesar todas las solicitudes, por lo que algunas muestran un código de error 503
.
Para resolver este problema, prueba una o más de las siguientes opciones:
Aumenta la cantidad máxima de instancias de contenedor para tu servicio.
Disminuir la simultaneidad del servicio Consulta cómo configurar la simultaneidad para obtener instrucciones más detalladas.
HTTP 504: Error de tiempo de espera de la puerta de enlace
HTTP 504 The request has been terminated because it has reached the maximum request timeout.
Si tu servicio procesa solicitudes largas, puedes aumentar el tiempo de espera de la solicitud. Si tu servicio no muestra una respuesta dentro del tiempo especificado, la solicitud finaliza y el servicio muestra un error HTTP 504
, como se documenta en el contrato del entorno de ejecución de contenedores.
Para resolver este problema, prueba una o más de las siguientes opciones:
Instrumenta el registro y el seguimiento para comprender dónde la app pasa tiempo antes de exceder el tiempo de espera configurado de la solicitud.
Las conexiones salientes se restablecen de vez en cuando, debido a actualizaciones de infraestructura. Si tu aplicación vuelve a usar conexiones de larga duración, te recomendamos entonces que configures tu aplicación para restablecer las conexiones a fin de evitar la reutilización de una conexión inactiva.
- Según la lógica de la app o el manejo de errores, un error
504
puede ser un indicador de que la aplicación intenta reutilizar una conexión inactiva y la solicitud se bloquea hasta que se agote el tiempo de espera de la solicitud configurada. - Puedes usar un sondeo de capacidad de respuesta para ayudar a finalizar una instancia que muestra errores persistentes.
- Según la lógica de la app o el manejo de errores, un error
Los errores de memoria insuficiente que ocurren dentro del código de la app, por ejemplo,
java.lang.OutOfMemoryError
, no necesariamente finalizan una instancia de contenedor. Si el uso de memoria no excede el límite de memoria del contenedor, no se finalizará la instancia. Según cómo la app maneje los errores de memoria insuficiente de la app, las solicitudes pueden quedar en espera hasta que excedan el tiempo de espera de la solicitud configurada.- Si quieres que la instancia de contenedor se cierre en la situación anterior, configura el límite de memoria a nivel de la app para que sea mayor que el límite de memoria del contenedor.
- Puedes usar un sondeo de capacidad de respuesta para finalizar una instancia que muestra errores persistentes.
Errores de Cloud Logging relacionados con la anulación de solicitudes pendientes en cola
Uno de los siguientes errores ocurre cuando Cloud Run no escala con la suficiente rapidez como para administrar el tráfico:
-
The request was aborted because there was no available instance:
severity=WARNING
( Response code: 429 ) Cloud Run cannot scale due to themax-instances
limit you set during configuration. -
severity=ERROR
( Response code: 500 ) Cloud Run intrinsically cannot manage the rate of traffic.
Para resolver el problema, sigue estos pasos:
Soluciona las causas raíz que podrían causar fallas de escalamiento, como las siguientes:
- Un gran incremento repentino del tráfico.
- Tiempo de inicio en frío largo.
- Tiempo de procesamiento de solicitudes largo.
- Tasa alta de errores de código fuente.
- Alcanzar el límite máximo de instancias y evitar que el sistema escale.
- Factores transitorios atribuidos al servicio de Cloud Run.
Para obtener más información sobre cómo resolver problemas de escalamiento y optimizar el rendimiento, consulta Sugerencias generales para el desarrollo.
Para los servicios o funciones basados en activadores HTTP, haz que el cliente implemente una retirada exponencial y vuelva a intentar las solicitudes que no se deben descartar. Si activas servicios desde Workflows, puedes usar la sintaxis
try/retry
para lograrlo.Para las funciones o los servicios en segundo plano o controlados por eventos, Cloud Run admite la entrega al menos una vez. Incluso sin habilitar explícitamente el reintento, Cloud Run vuelve a entregar el evento y reintenta la ejecución de forma automática. Consulta Reintenta las funciones controladas por eventos para obtener más información.
Para los problemas relacionados con los inicios en frío, configura instancias mínimas para reducir la cantidad de inicios en frío con una implicación de facturación más alta.
Si la causa raíz del problema es un período de errores transitorios prolongados atribuidos solo a Cloud Run o si necesitas ayuda con tu problema, comunícate con el equipo de asistencia.
Un par restableció la conexión
Uno de los siguientes errores ocurre durante la entrega:
Connection reset by peer
asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation
grpc.StatusRuntimeException: UNAVAILABLE: io exception
psycopg.OperationalError: the connection is closed
ECONNRESET
Este error ocurre cuando una aplicación tiene una conexión TCP establecida con un par de red, y ese par cierra la conexión de forma inesperada.
Para solucionar este problema, sigue estos pasos:
Si intentas realizar un trabajo en segundo plano con limitación de CPU, intenta usar la configuración de facturación basada en instancias.
Asegúrate de estar dentro de los tiempos de espera de las solicitudes salientes. Si tu aplicación mantiene cualquier conexión en un estado inactivo más allá de estos límites, la puerta de enlace debe obtener la conexión.
De forma predeterminada, la opción de socket TCP
keepalive
está inhabilitada para Cloud Run. No hay una forma directa de configurar la opciónkeepalive
en Cloud Run a nivel de servicio, pero puedes habilitar la opciónkeepalive
para cada conexión de socket si proporcionas las opciones de socket correctas cuando abres una conexión de socket TCP nueva, según la biblioteca cliente que uses para esta conexión en tu aplicación.En ocasiones, las conexiones salientes se restablecen debido a actualizaciones de infraestructura. Si tu aplicación vuelve a usar conexiones de larga duración, te recomendamos entonces que configures tu aplicación para restablecer las conexiones a fin de evitar la reutilización de una conexión inactiva.
Si usas un proxy HTTP para enrutar el tráfico de salida de tus servicios o trabajos de Cloud Run y el proxy aplica la duración máxima de la conexión, el proxy puede descartar de forma silenciosa las conexiones TCP de larga duración, como las establecidas. mediante la agrupación de conexiones. Esto hace que los clientes HTTP fallen cuando se reutiliza una conexión ya cerrada. Si pretendes enrutar el tráfico de salida a través de un proxy HTTP, asegúrate de considerar esta situación implementando la validación de conexiones, los reintentos y la retirada exponencial. Para los grupos de conexiones, configura los valores máximos de antigüedad de la conexión, las conexiones inactivas y el tiempo de espera de inactividad de la conexión.
Tiempos de espera de conexión
Los errores de latencia o uno de los siguientes errores se producen cuando hay tiempos de espera de conexión cuando se realiza una solicitud a un host remoto:
java.io.IOException: Connection timed out
ConnectionError: HTTPSConnectionPool
dial tcp REMOTE_HOST:REMOTE_PORT: i/o timeout / context error
Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
Este tipo de errores se producen cuando una aplicación intenta crear un TCP con un host remoto y la conexión tarda demasiado.
Si enrutas todo el tráfico de salida a través de una red de VPC, ya sea mediante conectores de VPC o la salida directa de VPC, asegúrate que:
Definiste todas las reglas de firewall necesarias para permitir la entrada para los conectores de VPC.
Las reglas de firewall de VPC permiten que el tráfico de entrada de los conectores de VPC o la subred de salida de VPC directa llegue al host o la subred de destino.
Tienes todas las rutas necesarias para permitir el enrutamiento correcto de tráfico a los hosts de destino y de regreso. Esto es importante cuando se enruta el tráfico de salida a través del intercambio de tráfico entre redes de VPC o la conectividad de nube híbrida, ya que los paquetes atraviesan varias redes antes de llegar al host remoto.
Si usas un proxy HTTP para enrutar todo el tráfico de salida de tus servicios o trabajos de Cloud Run, asegúrate de que se pueda acceder a los hosts remotos mediante el proxy.
El tráfico enrutado a través de un proxy HTTP puede retrasarse según el uso de recursos del proxy. Si se pretende enrutar el tráfico de salida HTTP con un proxy, asegúrate de tener en cuenta esta situación mediante la implementación de los reintentos, la retirada exponencial o los disyuntores.
Configura excepciones de proxy HTTP
Cuando uses un proxy HTTP para enrutar el tráfico de salida de tus trabajos o servicios de Cloud Run, asegúrate de agregar excepciones para las APIs de Cloud y otros hosts y subredes sin proxy para evitar que latencia, tiempos de espera de conexión, restablecimientos de conexiones y errores de autenticación.
Los hosts y las subredes sin proxy deben incluir, como mínimo, lo siguiente:
127.0.0.1
169.254.*
o169.254.0.0/16
localhost
*.google.internal
*.googleapis.com
De forma opcional, los hosts sin proxy pueden incluir lo siguiente:
*.appspot.com
*.run.app
*.cloudfunctions.net
*.gateway.dev
*.googleusercontent.com
*.pkg.dev
*.gcr.io
Formas comunes de configurar las excepciones del Proxy HTTP para las redes de salida incluyen lo siguiente:
- Variables de entorno:
NO_PROXY
ono_proxy
. Marca
http.nonProxyHosts
de la máquina virtual Java.- La propiedad del sistema
https.nonProxyHosts
no está definida, por lo quehttp.nonProxyHosts
se aplica a HTTP y HTTPS. - La propiedad del sistema
http.nonProxyHosts
no admite la notación CIDR, por lo que debes usar expresiones de coincidencia de patrones.
- La propiedad del sistema
Firma de token de identidad oculta por Google
Los siguientes errores ocurren durante la entrega:
SIGNATURE_REMOVED_BY_GOOGLE
Esto puede ocurrir durante el desarrollo y las pruebas en las siguientes circunstancias:
- El usuario accede con Google Cloud CLI o Cloud Shell.
- El usuario genera un token de ID mediante los comandos
gcloud
. - El usuario intenta usar el token de ID para invocar un servicio no público de Cloud Run.
Se diseñó de este modo. Google quita la firma del token debido a problemas de seguridad para evitar que cualquier servicio no público de Cloud Run repita los tokens de ID que se generan de esta manera.
Para resolver este problema, invoca tu servicio privado con un token de ID nuevo. Para obtener más información, consulta Prueba la autenticación en el servicio.
Advertencia de OpenBLAS en los registros
Si usas bibliotecas basadas en OpenBLAS, como NumPy con el entorno de ejecución de primera generación, es posible que veas la siguiente advertencia en tus registros:
OpenBLAS WARNING - could not determine the L2 cache size on this system,
assuming 256k
Esto es solo una advertencia y no afecta tu servicio. Esta advertencia se produce porque la zona de pruebas del contenedor que usa el entorno de ejecución de primera generación no expone funciones de hardware de bajo nivel. De manera opcional, puedes cambiar al entorno de ejecución de segunda generación si no deseas tener estas advertencias en tus registros.
Spark falla cuando se obtiene una dirección IP de máquina a la que se debe vincular
Uno de los siguientes errores ocurre durante la entrega:
assertion failed: Expected hostname (not IP) but got <IPv6 ADDRESS>
assertion failed: Expected hostname or IPv6 IP enclosed in [] but got <IPv6 ADDRESS>
Para solucionar este problema, sigue estos pasos:
Para cambiar el valor de la variable de entorno y resolver el problema, establece ENV
SPARK_LOCAL_IP="127.0.0.1"
en tu Dockerfile. En Cloud Run, si la variable SPARK_LOCAL_IP
no está configurada, se usará de forma predeterminada su contraparte IPv6 en lugar de localhost. Ten en cuenta que la configuración de RUN export SPARK_LOCAL_IP="127.0.0.1"
no estará disponible en el entorno de ejecución y Spark funcionará como si no se hubiese establecido.
Asigna dominios personalizados
El dominio personalizado está atascado en el estado de aprovisionamiento de certificados
Uno de los siguientes errores ocurre cuando intentas asignar un dominio personalizado:
The domain is available over HTTP. Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin and to accept HTTP traffic.
Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin.
Para solucionar este problema, sigue estos pasos:
- Espera al menos 24 horas. El aprovisionamiento del certificado SSL suele demorar unos 15 minutos, pero puede tardar hasta 24 horas.
Verifica que hayas actualizado de forma correcta los registros DNS en el registrador de dominios mediante la herramienta de resumen de la Consola del administrador de Google.
Los registros DNS de tu registrador de dominios deben coincidir con lo que te solicita agregar la consola de Google Cloud.
Confirma que la raíz del dominio se verifique en tu cuenta mediante uno de los siguientes métodos:
- Sigue las instrucciones para agregar propietarios de dominio verificados y comprueba que tu cuenta aparezca como Propietario verificado.
- Usa Search Console.
Verifica que el certificado del dominio no haya vencido. Para encontrar los límites de vencimiento, usa el siguiente comando:
echo | openssl s_client -servername 'ROOT_DOMAIN' -connect 'ROOT_DOMAIN:443' 2>/dev/null | openssl x509 -startdate -enddate -noout
La desconexión del cliente no se propaga a Cloud Run
Cuando usas HTTP/1.1 en Cloud Run, los eventos de desconexión del cliente no se propagan al contenedor de Cloud Run.
La solución es usar WebSockets o HTTP/2.0, que propagan las desconexiones del cliente.
Solución de problemas del sistema de archivos de red
Obtén más información para usar sistemas de archivos de red.
No se puede acceder a los archivos con NFS
Error | Solución sugerida |
---|---|
mount.nfs: Protocol not supported |
A algunas imágenes base, como debian y adoptopenjdk/openjdk11 , les falta la dependencia nfs-kernel-server. |
mount.nfs: Connection timed out |
Si se agota el tiempo de espera de la conexión, asegúrate de proporcionar la dirección IP correcta de la instancia de Filestore. |
mount.nfs: access denied by server while mounting IP_ADDRESS:/FILESHARE |
Si el servidor rechazó el acceso, verifica que el nombre del archivo compartido sea correcto. |
No se puede acceder a los archivos con Cloud Storage FUSE
Consulta la guía de solución de problemas de Cloud Storage FUSE.