配置容器

本页介绍了如何为 Cloud Run 服务配置容器端口、入口点命令和参数。

当 Cloud Run 启动容器时,它会运行映像的默认入口点命令和默认命令参数。如果要替换映像的默认入口点和命令参数,您可以使用容器配置中的 commandargs 字段。command 字段指定容器运行的实际命令。args 字段指定传递给该命令的参数。

请注意,每个服务的每个容器最多可以有 1,000 个参数。

所需的角色

如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 服务与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

配置容器端口

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

对于 Cloud Run 服务,Cloud Run 会将 PORT 环境变量注入容器中。 如果将多个容器部署到服务,则这是 Ingress 容器。该容器监听 PORT 环境变量定义的端口,而不是特定的硬编码端口。如果无法实现,请配置监听用于将请求发送给容器的端口。请注意,端口设置不适用于 Cloud Run 作业。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击容器标签页。

    图片

    • 指定要向其发送请求的端口(如果该端口不是默认值 8080)。这也会设置 PORT 环境变量。
  5. 点击创建部署

gcloud

您可以使用以下命令更新服务的端口配置

gcloud run services update SERVICE --port PORT

您需要进行如下替换

  • SERVICE 替换为相应服务的名称。
  • PORT 替换为要向其发送请求的端口。请注意,默认端口为 8080

您还可以使用以下命令在部署期间配置端口:

gcloud run deploy --image IMAGE_URL --port PORT

IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 containerPort: 特性:

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

    您需要进行如下替换:

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PORT 替换为要向其发送请求的端口。
    • REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
      • 开头为 SERVICE-
      • 仅包含小写字母、数字和 -
      • 不以 - 结尾
      • 不超过 63 个字符
  3. 使用以下命令将服务替换为其新配置:

    gcloud run services replace service.yaml

配置入口点和参数

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

指定的容器命令和参数会替换默认映像 ENTRYPOINTCMD

您可以在创建新服务部署新修订版本时使用 Google Cloud 控制台、Google Cloud CLI 或使用 YAML 文件来设置入口点命令和参数:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击容器标签页。

    图片

    • 指定您希望容器运行的命令(如果该命令不是容器中定义的命令);您还可以选择指定入口点命令的参数。
  5. 点击创建部署

gcloud

如需更新现有服务的启动命令和参数,请执行以下操作:

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

您需要进行如下替换

  • COMMAND 替换为启动容器的命令(如果您未使用默认命令)。
  • ARG1 替换为要发送到容器命令的参数;请对多个参数使用英文逗号分隔列表。

如需在新服务或现有服务的部署期间指定入口点和参数,请执行以下操作:

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

IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

如需清除您设置的任何入口点命令和参数(恢复为容器默认值),请提供空字符串,如下所示:

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

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 commandargs 特性:

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

    您需要进行如下替换

    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • COMMAND 替换为启动容器的命令(如果您未使用默认命令)。
    • ARG1 替换为要发送到容器命令的参数。如果您使用多个参数,在指定参数时应使每个参数独占一行,例如 ARG-N
  3. 使用以下命令将服务替换为其新配置:

    gcloud run services replace service.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

以下 google_cloud_run_v2_service 资源指定了命令和参数。将 /server 替换为用于启动容器的命令,并将任何必要的参数添加到 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 = []
    }
  }
}

在参数中使用等号或英文逗号

如果您在参数中使用等号,请使用以下格式提供这些参数:

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

如果参数使用英文逗号,请参阅配置环境变量以详细了解如何进行转义。

为 sidecar 部署配置容器启动顺序

如需在 Sidecar 部署中指定容器启动顺序,请使用容器依赖项功能。您可以指定任何具有依赖项的容器,并列出它们所依赖的容器:这些容器首先启动。没有任何依赖项的容器始终首先并发启动。

如果您想成功使用此功能,则必须使用启动健康检查探测。启动探测使 Cloud Run 能够检查依赖容器的健康状况,确保其在启动下一个容器之前成功通过。如果不使用健康检查,即使容器依赖的容器无法启动,它们也会按指定的顺序启动。

请注意,Ingress 容器具有默认的启动健康检查探测。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 指定启动顺序:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Run 页面。

    转到 Cloud Run

    • 对于现有服务,请点击列表中的服务,然后选择修改和部署新的修订版本以显示修订版本部署表单。
    • 对于新服务,请点击部署容器并选择服务以显示创建服务表单。
  2. 对于新服务,请指定服务名称、入站流量容器网址、CPU 分配、入站流量控制和身份验证。在容器、卷、网络、安全性标签页中,执行以下操作:

    1. 配置 Ingress 容器。
    2. 如需添加要部署的每个其他容器,请点击添加容器
    3. 对于除 Ingress 容器之外的所有容器,请配置启动健康检查。Ingress 容器具有默认的启动健康检查。
    4. 如果某个容器需要先启动其他容器才能启动,请使用容器启动顺序菜单选择必须先启动的容器。
  3. 对于现有服务,请按以下步骤操作:

    1. 对于除 Ingress 容器之外的所有容器,请配置启动健康检查。Ingress 容器具有默认的启动健康检查。
    2. 每个容器都有自己的容器启动顺序菜单。如果某个容器需要先启动其他容器才能启动,请使用容器启动顺序菜单选择必须先启动的容器。
  4. 完成任何其他必需配置,然后点击创建(对于新服务)或部署(对于现有服务)。等待部署完成。

gcloud

在使用 Google Cloud CLI 指定启动顺序之前,您必须为除 Ingress 容器之外的所有容器配置启动健康检查。Ingress 容器具有默认的启动健康检查。您无法使用 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. 如需将多个容器部署到具有指定启动顺序的服务,请运行以下命令:

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
  • SERVICE 替换为要部署到的服务的名称。您可以完全省略此参数,但如果省略它,系统将提示您输入服务名称。
  • CONTAINER_PORT 替换为入站流量容器监听传入请求的端口。与单容器服务不同,对于包含 Sidecar 的服务,入站流量容器没有默认端口。您必须为入站流量容器明确配置容器端口,并且只有一个容器可以公开该端口。
  • INGRESS_IMAGE 替换为对应接收请求的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest
  • SIDECAR_IMAGE 替换为对边车容器映像的引用

    如果要在部署命令中配置每个容器,请在 container 参数后面提供每个容器的配置。

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

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

    您需要进行如下替换

    • CONTAINER1 替换为依赖于一个或多个容器的第一个容器的名称。请注意,您可以在 YAML 中设置容器名称:如果未指定名称,Cloud Run 会自动生成一个名称。
    • CONTAINER2 替换为必须在 CONTAINER1 之前启动的容器的名称。
    • CONTAINER3 替换为依赖于一个或多个容器的第二个容器的名称。

    在 YAML 代码段中显示的示例中,CONTAINER2 先启动,CONTAINER1 然后启动,CONTAINER3 最后启动。

  3. 使用以下命令将服务替换为其新配置:

    gcloud run services replace service.yaml

查看容器设置

如需查看 Cloud Run 服务的当前容器设置,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击您感兴趣的服务以打开“服务详细信息”页面。

  3. 点击修订版本标签页。

  4. 在右侧的详细信息面板中,“容器”标签页下列出了容器设置。

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到容器设置。