配置容器

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

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

配置容器端口

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

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

控制台

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

    转到 Cloud Run

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

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

  4. 点击容器标签页。

    图片

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

命令行

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

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

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后按照后续说明修改字段,最后使用 gcloud run services replace 命令上传修改后的 YAML。请务必严格按照说明修改字段。

  1. 要查看和下载配置,请运行以下命令:

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

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后按照后续说明修改字段,最后使用 gcloud run services replace 命令上传修改后的 YAML。请务必严格按照说明修改字段。

  1. 如需查看和下载配置,请运行以下命令:

    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"

  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. 转到 Cloud Run

    • 对于现有服务,请点击列表中的服务,然后选择修改和部署新的修订版本以显示修订版本部署表单。
    • 对于新服务,请点击创建服务
  2. 对于新服务,请指定服务名称、Ingress 容器网址、CPU 分配、Ingress 控制和身份验证,然后点击容器、卷、网络、安全性

  3. 对于新服务,在容器、卷、网络、安全性标签页中,执行以下操作:

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

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

命令行

Google Cloud CLI 中的 container 参数为预览版。

在使用 Google Cloud CLI 指定启动顺序之前,您必须为除 Ingress 容器之外的所有容器配置启动健康检查。Ingress 容器具有默认的启动健康检查。您无法使用 Google Cloud CLI 来配置健康检查。

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 如需将多个容器部署到具有指定启动顺序的服务,请运行以下命令:

gcloud run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' \
     --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 替换为要部署到的服务的名称。您可以完全省略此参数,但如果省略它,系统将提示您输入服务名称。
  • INGRESS_IMAGE 替换为对应接收请求的容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest
  • SIDECAR_IMAGE 替换为对 Sidecar 容器映像的引用

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

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后按照后续说明修改字段,最后使用 gcloud run services replace 命令上传修改后的 YAML。请务必严格按照说明修改字段。

  1. 要查看和下载配置,请运行以下命令:

    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. 在右侧的详细信息面板中,“容器”标签页下列出了容器设置。

命令行

  1. 使用以下命令:

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