Configure contentores para serviços

Esta página descreve como configurar a porta do contentor, o comando de ponto de entrada e os argumentos para um serviço do Cloud Run.

Quando o Cloud Run inicia um contentor, executa o comando de ponto de entrada predefinido da imagem e os argumentos de comando predefinidos. Se quiser substituir o ponto de entrada predefinido e os argumentos de comando da imagem, pode usar os campos command e args na configuração do contentor. O campo command especifica o comando real executado pelo contentor. O campo args especifica os argumentos transmitidos a esse comando.

Tenha em atenção que pode ter um máximo de 1000 argumentos por contentor para cada serviço.

Funções necessárias

Para receber as autorizações de que precisa para configurar e implementar serviços do Cloud Run, peça ao seu administrador para lhe conceder as seguintes funções de IAM:

Se estiver a implementar um serviço ou uma função a partir do código fonte, também tem de ter funções adicionais concedidas no seu projeto e na conta de serviço do Cloud Build.

Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se o seu serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

Configure a porta do contentor

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Para os serviços do Cloud Run, o Cloud Run injeta a variável de ambiente PORT no contentor. Se implementar vários contentores num serviço, este é o contentor de entrada. O contentor escuta na porta definida pela variável de ambiente PORT, em vez de numa porta específica codificada. Se não for possível, configure a escuta para ocorrer na porta que envia pedidos para o contentor. Tenha em atenção que as definições de porta não se aplicam a tarefas do Cloud Run.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Contentor.

    imagem

    • Especifique a porta para a qual quer que os pedidos sejam enviados, se não for o valor predefinido de 8080. Esta ação também define a variável de ambiente PORT.
  5. Clique em Criar ou Implementar.

gcloud

Pode atualizar a configuração da porta de um serviço com o seguinte comando:

gcloud run services update SERVICE --port PORT

Substitua o seguinte:

  • SERVICE: o nome do serviço.
  • PORT: a porta para enviar pedidos. Tenha em atenção que a porta predefinida é 8080.

Também pode configurar portas durante a implementação através do comando:

gcloud run deploy --image IMAGE_URL --port PORT

Substitua IMAGE_URL por uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize o 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
    

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PORT: a porta para enviar pedidos.
    • REVISION com um novo nome de revisão ou elimine-o (se existir). Se fornecer um novo nome de revisão, este tem de cumprir os seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não exceder 63 carateres
      .
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

  template {
    containers {
      name = "hello-1"
      ports {
        container_port = PORT
      }
      image = "IMAGE_URL"
    }
  }
}

Substitua o seguinte:

  • SERVICE: o nome do seu serviço do Cloud Run.
  • REGION: a Google Cloud região. Por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • PORT: a porta para enviar pedidos.

Configure o ponto de entrada e os argumentos

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

O comando e os argumentos do contentor especificados substituem a imagem predefinida ENTRYPOINT e CMD.

Pode definir o comando e os argumentos do ponto de entrada através da Google Cloud consola, da CLI Google Cloud ou de um ficheiro YAML quando cria um novo serviço ou implementa uma nova revisão:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Contentor.

    imagem

    • Especifique o comando que quer que o contentor execute, se não for o comando definido no seu contentor, e especifique opcionalmente os argumentos para o comando do ponto de entrada.
  5. Clique em Criar ou Implementar.

gcloud

Para atualizar o comando de início e os argumentos de um serviço existente:

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

Substitua o seguinte:

  • COMMAND: o comando com o qual o contentor deve ser iniciado se não estiver a usar o comando predefinido.
  • ARG1: o argumento que está a enviar para o comando do contentor. Use uma lista delimitada por vírgulas para mais do que um argumento.

Para especificar o ponto de entrada e os argumentos durante a implementação de um serviço novo ou existente:

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

Substitua IMAGE_URL por uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Para limpar todos os comandos e argumentos de ponto de entrada que definiu (restaurar as predefinições do contentor), forneça strings vazias da seguinte forma:

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

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize os atributos command e args:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            command:
            - COMMAND
            args:
            - ARG1
            - ARG-N

    Substitua o seguinte:

    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • COMMAND: o comando com o qual o contentor deve ser iniciado se não estiver a usar o comando predefinido.
    • ARG1: o argumento que está a enviar para o comando do contentor. Se usar vários argumentos, especifique cada um na sua própria linha, por exemplo, como mostrado, ARG-N.
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:
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 = []
    }
  }
}

O recurso google_cloud_run_v2_service anterior especifica um comando e args. Substitua /server pelo comando usado para iniciar o seu contentor e adicione os argumentos necessários à matriz args.

Use sinais de igual ou vírgulas nos argumentos

Se usar sinais de igual nos argumentos, forneça-os no seguinte formato:

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

Se os seus argumentos usarem vírgulas, consulte a secção Configurar variáveis de ambiente para ver detalhes sobre como ignorá-las.

Configure a ordem de início do contentor para implementações de sidecar

Para especificar a ordem de arranque do contentor numa implementação sidecar, usa a funcionalidade de dependências de contentores. Especifica os contentores que têm dependências e lista os contentores dos quais dependem: esses contentores são iniciados primeiro. Os contentores que não têm dependências são sempre iniciados primeiro e em simultâneo.

Tem de usar sondas de verificação do estado de arranque se quiser usar esta funcionalidade com êxito. A análise de arranque permite ao Cloud Run inspecionar o estado de um contentor dependente, garantindo que é aprovado com êxito antes de iniciar o contentor seguinte. Se não usar verificações de estado, os contentores são iniciados na ordem especificada, mesmo que os contentores dos quais dependem não sejam iniciados.

Tenha em atenção que os contentores de entrada têm uma sondagem de verificação de estado de arranque predefinida.

Pode usar a Google Cloud consola, a Google Cloud CLI ou o YAML para especificar a ordem de início:

Consola

  1. Na Google Cloud consola, aceda à página do Cloud Run:

    Aceda ao Cloud Run

    • Para um serviço existente, clique no serviço na lista e selecione Editar e implementar nova revisão para apresentar o formulário de implementação de revisões.
    • Para um novo serviço, selecione Serviços no menu e clique em Implementar contentor para apresentar o formulário Criar serviço.
  2. Para um novo serviço, especifique o nome do serviço, o URL do contentor de entrada, a atribuição de CPU, o controlo de entrada e a autenticação. No separador Contentores, volumes, trabalhar em rede, segurança, faça o seguinte:

    1. Configure o contentor de entrada.
    2. Para adicionar cada um dos outros contentores que está a implementar, clique em Adicionar contentor.
    3. Para todos os contentores, exceto o contentor de entrada, configure uma verificação de estado de arranque. Os contentores de entrada têm uma verificação de estado de arranque predefinida.
    4. Se um contentor precisar que outros contentores sejam iniciados primeiro antes de poder ser iniciado, use o menu Ordem de início do contentor para selecionar os contentores que têm de ser iniciados primeiro.
  3. Para um serviço existente, siga estes passos:

    1. Para todos os contentores, exceto o contentor de entrada, configure uma verificação de estado de arranque. Os contentores de entrada têm uma verificação de estado de arranque predefinida.
    2. Cada contentor é apresentado com o seu próprio menu de Ordem de arranque do contentor. Se um contentor precisar que outros contentores sejam iniciados primeiro antes de poder ser iniciado, use o menu Ordem de início do contentor para selecionar os contentores que têm de ser iniciados primeiro.
  4. Conclua todas as outras configurações necessárias e, de seguida, clique em Criar para um novo serviço ou em Implementar para um serviço existente. Aguarde até que a implementação esteja concluída.

gcloud

Antes de usar a CLI Google Cloud para especificar a ordem de arranque, tem de configurar uma verificação de estado de arranque para todos os contentores, exceto o contentor de entrada. Os contentores de entrada têm uma verificação de estado de arranque predefinida. Não pode configurar verificações de estado com a CLI gcloud.

  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 vários contentores num serviço com uma ordem de arranque especificada, execute o comando:

  3. 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

    Substitua o seguinte:

    • SERVICE: o nome do serviço para o qual está a fazer a implementação. Pode omitir este parâmetro por completo, mas é-lhe pedido o nome do serviço se o omitir.
    • CONTAINER_PORT: a porta onde o contentor de entrada ouve os pedidos recebidos. Ao contrário de um serviço de contentor único, para um serviço que contenha sidecars, não existe uma porta predefinida para o contentor de entrada. Tem de configurar explicitamente a porta do contentor para o contentor de entrada e apenas um contentor pode ter a porta exposta.
    • INGRESS_IMAGE: uma referência à imagem do contentor que deve receber pedidos, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest.
    • SIDECAR_IMAGE: uma referência à imagem do contentor auxiliar.

      Se quiser configurar cada contentor no comando de implementação, forneça a configuração de cada contentor após os parâmetros container.

    YAML

    1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

      gcloud run services describe SERVICE --format export > service.yaml
    2. Atualize o 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"]}'
      

      Substitua o seguinte:

      • CONTAINER1: o nome do primeiro contentor que depende de um ou mais contentores. Tenha em atenção que pode definir o nome do contentor no YAML: o Cloud Run gera automaticamente um nome se não for especificado.
      • CONTAINER2: o nome do contentor que tem de ser iniciado antes de CONTAINER1.
      • CONTAINER3: o nome do segundo contentor que depende de um ou mais contentores.

      No exemplo apresentado no fragmento YAML, CONTAINER2 é iniciado primeiro, CONTAINER1 é iniciado em segundo lugar e CONTAINER3 é iniciado por último.

    3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

      gcloud run services replace service.yaml

    Terraform

    Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

    Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:
    resource "google_cloud_run_v2_service" "default" {
      name     = "SERVICE"
      location = "REGION"
    
      template {
        containers {
          name = "CONTAINER1"
          ports {
            container_port = 8080
          }
          image = "us-docker.pkg.dev/cloudrun/container/hello"
          depends_on = ["CONTAINER2"]
        }
        containers {
          name = "CONTAINER2"
          image = "us-docker.pkg.dev/cloudrun/container/hello"
          env {
            name = "PORT"
            value = "8081"
          }
          startup_probe {
            http_get {
              port = 8081
            }
          }
        }
        containers {
          name = "CONTAINER3"
          image = "us-docker.pkg.dev/cloudrun/container/hello"
          depends_on = ["CONTAINER1", "CONTAINER2"]
          env {
            name = "PORT"
            value = "8080"
          }
          startup_probe {
            http_get {
              port = 8080
            }
          }
        }
      }
    }
    

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • REGION: a Google Cloud região. Por exemplo, europe-west1.
    • CONTAINER1: o nome do primeiro contentor que depende de um ou mais contentores.
    • CONTAINER2: o nome do contentor que tem de ser iniciado antes de CONTAINER1.
    • CONTAINER3: o nome do contentor que depende de CONTAINER1 e CONTAINER2.

Ver definições do contentor

Para ver as definições atuais do contentor do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

  3. Clique no separador Revisões.

  4. No painel de detalhes à direita, a definição do contentor é apresentada no separador Contentor.

gcloud

  1. Use o seguinte comando:

    gcloud run services describe SERVICE
  2. Localize a definição do contentor na configuração devolvida.