Configura contenedores

En esta página, se describe cómo configurar el puerto del contenedor, el comando entrypoint y los argumentos para los servicios de Cloud Run.

Cuando Cloud Run inicia un contenedor, ejecuta el comando entrypoint predeterminado y los argumentos del comando predeterminados de la imagen. Si deseas anular el entrypoint predeterminado y los argumentos del comando de la imagen, puedes usar los campos command y args en la configuración del contenedor. El campo command especifica el comando real que ejecuta el contenedor. El campo args especifica los argumentos que se pasan a ese comando.

Roles obligatorios

Para obtener los permisos que necesitas para configurar y, luego, implementar los servicios de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta Roles de IAM de Cloud Run y Permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs de Google Cloud, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información acerca de cómo otorgar roles, consulta Permisos de implementación y Administra el acceso.

Configura el puerto del contenedor

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

En los servicios de Cloud Run, Cloud Run inserta la variable de entorno PORT en el contenedor. Si implementas varios contenedores en un servicio, este es el contenedor de entrada. El contenedor escucha en el puerto definido por la variable de entorno PORT, en lugar de un puerto codificado específico. Si esto no es posible, configura la escucha para que se realice en el puerto que envía solicitudes al contenedor. Ten en cuenta que la configuración de puertos no se aplica a los trabajos de Cloud Run.

Console

  1. En la consola de Google Cloud ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en Implementar contenedor y selecciona Servicio para configurar un servicio nuevo. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en implementar y editar la nueva revisión.

  3. Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y haz clic en Contenedores, volúmenes, Herramientas de redes y seguridad para expandir la página de configuración del servicio.

  4. Haz clic en la pestaña Contenedor.

    imagen

    • Especifica el puerto al que deseas que se envíen las solicitudes, si no es el valor predeterminado de 8080. Con esto también se establece la variable de entorno PORT.
  5. Haz clic en Crear o Implementar.

gcloud

Puedes actualizar la configuración del puerto de un servicio mediante el siguiente comando:

gcloud run services update SERVICE --port PORT

Reemplazar

  • SERVICE por el nombre del servicio
  • PORT por el puerto al que se envían las solicitudes. Ten en cuenta que el puerto predeterminado es 8080

También puedes configurar puertos durante la implementación mediante el siguiente comando:

gcloud run deploy --image IMAGE_URL --port PORT

Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza el atributo containerPort::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

    Reemplaza lo siguiente:

    • SERVICE por el nombre del servicio de Cloud Run
    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PORT por el puerto al que se envían las solicitudes
    • REVISION por un nombre de revisión nuevo o bórralo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir con los siguientes criterios:
      • Comienza con SERVICE-
      • Solo contiene letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
      .
  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud run services replace service.yaml

Configura un punto de entrada y argumentos

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

El comando y los argumentos del contenedor especificados anulan las imágenes predeterminadas ENTRYPOINT y CMD.

Puedes establecer argumentos y comandos entrypoint con la consola de Google Cloud, Google Cloud CLI o un archivo YAML cuando creas un servicio nuevo o implementas una revisión nueva:

Console

  1. En la consola de Google Cloud ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en Implementar contenedor y selecciona Servicio para configurar un servicio nuevo. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en implementar y editar la nueva revisión.

  3. Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y haz clic en Contenedores, volúmenes, Herramientas de redes y seguridad para expandir la página de configuración del servicio.

  4. Haz clic en la pestaña Contenedor.

    imagen

    • Especifica el comando que deseas que ejecute el contenedor, si no es el comando definido en tu contenedor y, de manera opcional, especifica los argumentos para el comando del entrypoint.
  5. Haz clic en Crear o Implementar.

gcloud

Para actualizar el comando de inicio y los argumentos de un servicio existente, sigue estos pasos:

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

Reemplazar

  • COMMAND por el comando que usará el contenedor si no usas el comando predeterminado
  • ARG1 por el argumento que envías al comando del contenedor; usa una lista delimitada por comas cuando haya más de un argumento

Para especificar un punto de entrada y argumentos durante la implementación de un servicio nuevo o existente, haz lo siguiente:

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

Para borrar cualquier comando y argumento de punto de entrada que hayas configurado (restablecer a los valores predeterminados del contenedor), proporciona cadenas vacías de la siguiente manera:

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza los atributos command y args:

    spec:
      containers:
      - image: IMAGE_URL
        command:
        - COMMAND
        args:
        - "ARG1"
        - "ARG-N"
    

    Reemplazar

    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • COMMAND por el comando que usará el contenedor si no usas el comando predeterminado
    • ARG1 por el argumento que envías al comando del contenedor. Si usas varios argumentos, especifica cada uno en su propia línea, por ejemplo, como se muestra, ARG-N.
  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

El siguiente recurso google_cloud_run_v2_service especifica un comando y argumentos. Reemplaza /server por el comando que se usa para iniciar el contenedor y agrega los argumentos necesarios al array args.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

Usa signos igual o comas en argumentos

Si usas el signo igual en tus argumentos, proporciónalos con el siguiente formato:

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

Si se usan comas en los argumentos, consulta Configura variables de entorno para obtener detalles sobre cómo escapar comas.

Configura el orden de inicio del contenedor para implementaciones de sidecar

Para especificar el orden de inicio del contenedor en una implementación de sidecar, se usa la función de dependencias de contenedores. Especifica cualquier contenedor que tenga dependencias y enumera los contenedores de los que dependen: esos contenedores se inician primero. Los contenedores que no tienen dependencias siempre se inician primero y de forma simultánea.

Debes usar sondeos de verificación de estado de inicio si deseas usar esta característica de forma correcta. El sondeo de inicio permite que Cloud Run inspeccione el estado de un contenedor dependiente, lo que garantiza que pase correctamente antes de iniciar el siguiente contenedor. Si no usas verificaciones de estado, los contenedores se inician en el orden especificado, incluso si los contenedores de los que dependen no pueden iniciarse.

Ten en cuenta que los contenedores de entrada tienen un sondeo de verificación de estado de inicio predeterminado.

Puedes usar la consola de Google Cloud, Google Cloud CLI o YAML para especificar el orden de inicio:

Console

  1. En la consola de Google Cloud, ve a la página Cloud Run:

    Ir a Cloud Run

    • En el servicio existente, haz clic en el servicio de la lista y selecciona Editar e implementar nueva revisión para editar el formulario de implementación de revisión.
    • En el caso de un servicio nuevo, haz clic en Implementar contenedor y selecciona Servicio para mostrar el formulario Crear servicio.
  2. Para un servicio nuevo, especifica el nombre del servicio, la URL del contenedor de entrada, la asignación de CPU, el control de entrada y la autenticación. En la pestaña Contenedores, volúmenes, herramientas de redes y seguridad, haz lo siguiente:

    1. Configura el contenedor de entrada.
    2. Para agregar cada uno de los otros contenedores que implementas, haz clic en Agregar contenedor.
    3. Para todos los contenedores, excepto el contenedor de entrada, configura una verificación de estado de inicio. Los contenedores de Ingress tienen una verificación de estado de inicio predeterminada.
    4. Si un contenedor necesita que otros contenedores se inicien antes de poder iniciarse, usa el menú Orden de inicio del contenedor para seleccionar los contenedores que deben iniciarse primero.
  3. Para un servicio existente, sigue estos pasos:

    1. Para todos los contenedores, excepto el contenedor de entrada, configura una verificación de estado de inicio. Los contenedores de Ingress tienen una verificación de estado de inicio predeterminada.
    2. Cada contenedor se muestra con su propio menú de Orden de inicio del contenedor. Si un contenedor necesita que otros contenedores se inicien antes de poder iniciarse, usa el menú Orden de inicio del contenedor para seleccionar los contenedores que deben iniciarse primero.
  4. Finaliza cualquier otra configuración necesaria y, luego, haz clic en Crear para un servicio nuevo o en Implementar en un servicio existente. Espera a que finalice la implementación.

gcloud

Antes de usar Google Cloud CLI para especificar el orden de inicio, debes configurar una verificación de estado de inicio para todos los contenedores, excepto el contenedor de entrada. Los contenedores de Ingress tienen una verificación de estado de inicio predeterminada. No puedes configurar las verificaciones de estado con Google Cloud CLI.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para implementar varios contenedores en un servicio con un orden de inicio especificado, ejecuta el siguiente comando:

gcloud run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME
  • Reemplaza SERVICE por el nombre del servicio en el que realizas la implementación. Puedes omitir este parámetro por completo, pero luego se te solicitará el nombre del servicio.
  • Reemplaza CONTAINER_PORT por el puerto en el que el contenedor de entrada escucha las solicitudes entrantes. A diferencia de un servicio de contenedor único, para un servicio que contiene sidecars no hay un puerto predeterminado para el contenedor de entrada. Debes configurar de forma explícita el puerto del contenedor para el contenedor de entrada, y solo un contenedor puede tener el puerto expuesto.
  • Reemplaza INGRESS_IMAGE por una referencia a la imagen de contenedor que debe recibir solicitudes, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest.
  • Reemplaza SIDECAR_IMAGE por una referencia a la imagen del contenedor del sidecar.

    Si deseas configurar cada contenedor en el comando de implementación, proporciona la configuración de cada contenedor después de los parámetros de container.

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza el atributo container-dependencies:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
    

    Reemplazar

    • CONTAINER1 por el nombre del primer contenedor que depende de uno o más contenedores. Ten en cuenta que puedes configurar el nombre del contenedor en el YAML: Cloud Run generará un nombre de forma automática si no se especifica uno.
    • CONTAINER2 por el nombre del contenedor que se debe iniciar antes de CONTAINER1.
    • CONTAINER3 por el nombre del segundo contenedor que depende de uno o más contenedores.

    En el ejemplo que se muestra en el fragmento YAML, CONTAINER2 se inicia primero, CONTAINER1 se inicia en segundo lugar y CONTAINER3 se inicia en último lugar.

  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud run services replace service.yaml

Visualiza la configuración del contenedor

Para ver la configuración actual del contenedor de tu servicio de Cloud Run, sigue estos pasos:

Console

  1. En la consola de Google Cloud ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que te interesa para abrir la página Detalles del servicio.

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles a la derecha, la configuración de contenedores aparece en la pestaña Contenedor.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca la configuración de contenedores en la configuración mostrada.