設定服務的容器

本頁說明如何設定 Cloud Run 服務的容器埠、進入點指令和引數。

Cloud Run 啟動容器時,會執行映像檔的預設進入點指令和預設指令引數。如要覆寫映像檔的預設進入點和指令引數,可以使用容器設定中的 commandargs 欄位。command 欄位會指定容器執行的實際指令。args 欄位會指定傳遞至該指令的引數。

請注意,每個服務的每個容器最多可有 1000 個引數。

必要的角色

如要取得設定及部署 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. 按一下 [Create] (建立) 或 [Deploy] (部署)

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

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

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

取代:

  • SERVICE 改為您的 Cloud Run 服務名稱。
  • REGION 替換成 Google Cloud 地區。例如:europe-west1
  • 並參照容器映像檔,例如: us-docker.pkg.dev/cloudrun/container/helloIMAGE_URL
  • PORT,並將要求傳送至該連接埠。

設定進入點和引數

變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。

指定的容器指令和引數會覆寫預設映像檔的 ENTRYPOINTCMD

您在 Google Cloud 建立新服務部署新修訂版本時,可以使用主控台、Google Cloud CLI 或 YAML 檔案設定進入點指令和引數:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  4. 按一下「容器」分頁標籤。

    圖片

    • 指定容器要執行的指令 (如果不是容器中定義的指令),並視需要指定進入點指令的引數。
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

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 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        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 指令」。

在 Terraform 設定中,將下列項目新增至 google_cloud_run_v2_service 資源:
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 = []
    }
  }
}

上述 google_cloud_run_v2_service 資源會指定指令和引數。將 /server 替換為用於啟動容器的指令,並在 args 陣列中新增任何必要引數。

在引數中使用等號或逗號

如果引數中含有等號,請使用下列格式提供引數:

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

如果引數使用半形逗號,請參閱設定環境變數,瞭解如何逸出這些引數。

設定補充部署作業的容器啟動順序

如要在附屬應用程式部署作業中指定容器啟動順序,請使用容器依附元件功能。您可以指定有依附元件的容器,並列出這些容器依附的容器,這些容器會先啟動。系統一律會先啟動沒有任何依附元件的容器,且會同時啟動。

如要順利使用這項功能,請務必使用啟動健康狀態檢查探針。啟動探測作業可讓 Cloud Run 檢查相依容器的健康狀態,確保容器順利通過檢查,再啟動下一個容器。如果您未使用健康檢查,即使容器所依附的容器無法啟動,系統仍會依指定順序啟動容器。

請注意,連入容器有預設的啟動健康狀態檢查探測。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 指定啟動順序:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

    • 如果是現有服務,請按一下清單中的服務,然後選取「編輯並部署新修訂版本」,顯示修訂版本部署表單。
    • 如要建立新服務,請從選單中選取「服務」,然後按一下「部署容器」,顯示「建立服務」表單。
  2. 如果是新服務,請指定服務名稱、Ingress 容器網址、CPU 分配量、Ingress 控制項和驗證。在「容器、磁碟區、網路與安全性」分頁中,執行下列操作:

    1. 設定 Ingress 容器。
    2. 如要新增部署的其他容器,請按一下「新增容器」
    3. 除了 Ingress 容器之外,請為所有容器設定啟動健康狀態檢查。Ingress 容器預設會進行啟動健康狀態檢查。
    4. 如果容器需要先啟動其他容器才能啟動,請使用「容器啟動順序」選單選取必須先啟動的容器。
  3. 如要為現有服務執行這項操作,請按照下列步驟操作:

    1. 除了 Ingress 容器之外,請為所有容器設定啟動健康狀態檢查。Ingress 容器預設會進行啟動健康狀態檢查。
    2. 每個容器都會顯示自己的「容器啟動順序」選單。如果容器需要先啟動其他容器才能啟動,請使用「容器啟動順序」選單選取必須先啟動的容器。
  4. 完成其他必要設定,然後按一下「建立」(適用於新服務) 或「部署」(適用於現有服務)。等待部署完成。

gcloud

使用 Google Cloud CLI 指定啟動順序前,請先為所有容器 (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 改為 Ingress 容器接聽傳入要求的連接埠。與單一容器服務不同,如果服務包含 Sidecar,則沒有預設的 Ingress 容器通訊埠。您必須明確設定 Ingress 容器的容器通訊埠,且只有一個容器可以公開通訊埠。
  • INGRESS_IMAGE 替換為應接收要求的容器映像檔參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest
  • SIDECAR_IMAGE 替換為 Sidecar 容器映像檔的參照

    如要在部署指令中設定每個容器,請在 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

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:
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
        }
      }
    }
  }
}

取代:

  • SERVICE 改為您的 Cloud Run 服務名稱。
  • REGION 替換成 Google Cloud 地區。例如:europe-west1
  • CONTAINER1,其中包含依附於一或多個容器的第一個容器名稱。
  • CONTAINER2,其中 CONTAINER1 必須先啟動。
  • 以依附於 CONTAINER1CONTAINER2 的容器名稱取代 CONTAINER3

查看容器設定

如要查看 Cloud Run 服務目前的容器設定:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 按一下感興趣的服務,開啟「服務詳細資料」頁面。

  3. 按一下「Revisions」(修訂版本) 分頁標籤。

  4. 在右側的詳細資料面板中,容器設定會列在「容器」分頁下方。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE
  2. 在傳回的設定中找出容器設定。