設定服務的容器

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

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

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

必要的角色

如要取得設定及部署 Cloud Run 服務所需的權限,請要求系統管理員授予您下列 IAM 角色:

如果您要從原始碼部署服務函式,則必須在專案和 Cloud Build 服務帳戶中獲得額外角色。

如需與 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. 從 Cloud Run 導覽選單中選取「服務」,然後點選「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後按一下「編輯及部署新的修訂版本」

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性) 展開服務設定頁面。

  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

  • 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:傳送要求的通訊埠。

撰寫

如要在 compose.yaml 檔案中指定容器通訊埠,請將 ports 屬性新增至服務定義。

  services:
    web:
      image: IMAGE
      ports:
        - "PORT:PORT"

更改下列內容:

  • IMAGE:容器映像檔的網址。
  • PORT:傳送要求的通訊埠。

部署服務

  1. 如要部署服務,請執行 gcloud run compose up 指令:

    gcloud run compose up compose.yaml
  2. 回應所有提示,安裝必要元件或啟用 API。y

  3. 選用:公開發布服務,允許未經驗證的存取。

部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。

設定進入點和引數

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

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

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

控制台

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

    前往 Cloud Run

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

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性) 展開服務設定頁面。

  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 陣列中新增任何必要引數。

撰寫

如要在 compose.yaml 檔案中指定進入點和引數,請將 entrypointcommand 屬性新增至服務定義。

  services:
    web:
      image: IMAGE
      entrypoint: ["COMMAND"]
      command: ["ARG1", "ARG-N"]

更改下列內容:

  • IMAGE:容器映像檔的網址。
  • COMMAND:容器啟動時要執行的指令。
  • ARG1:傳送至容器指令的引數。

部署服務

  1. 如要部署服務,請執行 gcloud run compose up 指令:

    gcloud run compose up compose.yaml
  2. 回應所有提示,安裝必要元件或啟用 API。y

  3. 選用:公開發布服務,允許未經驗證的存取。

部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。

在引數中使用等號或半形逗號

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

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

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

設定工作目錄

工作目錄是容器執行指令和引數的位置。部署新服務或現有服務時,您可以為容器程序指定自訂工作目錄。如未指定,系統會使用容器映像檔的預設工作目錄。如要將這個欄位重設為預設值,請傳遞空字串或移除該欄位。

例如:

YAML

  1. 如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定

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

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            workingDir: WORKING_DIR
            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
    • WORKING_DIR:(選用) 容器的工作目錄。如未指定,系統會使用容器執行階段的預設值,這可能是在容器映像檔中設定。
    • 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"
      working_dir = WORKING_DIR
      ports {
        container_port = PORT
      }
      image = "IMAGE_URL"
    }
  }
}

更改下列內容:

  • SERVICE:Cloud Run 服務的名稱。
  • REGION: Google Cloud 區域。例如:europe-west1
  • WORKING_DIR:(選用) 容器的工作目錄。如未指定,系統會使用容器執行階段的預設值,這可能是在容器映像檔中設定。
  • 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:傳送要求的通訊埠。請注意,預設通訊埠為 8080

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

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

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

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

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

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 Cloud Run

    • 如為現有服務,請按一下清單中的服務,然後選取「編輯及部署新的修訂版本」,顯示修訂版本部署表單。
    • 如要建立新服務,請按一下「Deploy container」(部署容器),顯示「Create service」(建立服務) 表單。
  2. 如果是新服務,請指定服務名稱、Ingress 容器網址、CPU 分配量、輸入控管和驗證。在「Containers, Networking, Security」分頁中,執行下列操作:

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

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

gcloud

使用 Google Cloud CLI 指定啟動順序前,請先為所有容器 (輸入容器除外) 設定啟動健康狀態檢查。輸入容器具有預設啟動健康狀態檢查。您無法使用 Google Cloud CLI 設定健康檢查。

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

  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:邊車容器映像檔的參照。

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

撰寫

如要在 compose.yaml 檔案中指定容器啟動順序,請將容器定義為個別服務,並為相依容器使用 depends_on 屬性。

services:
  web:
    image: IMAGE
    ports:
      - "8080:8080"
    container_name: web
  sidecar:
    image: SIDECAR_IMAGE
    container_name: sidecar
    depends_on:
      - web

更改下列內容:

  • IMAGE:主要容器映像檔的網址,例如 us-docker.pkg.dev/my-project/my-repo/hello
  • SIDECAR_IMAGE:邊車容器映像檔的網址。

部署服務

  1. 如要部署服務,請執行 gcloud run compose up 指令:

    gcloud run compose up compose.yaml
  2. 回應所有提示,安裝必要元件或啟用 API。y

  3. 選用:公開發布服務,允許未經驗證的存取。

部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。

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 之前啟動的容器名稱。
  • CONTAINER3:依附於 CONTAINER1CONTAINER2 的容器名稱。

查看容器設定

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

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 Cloud Run

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

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

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

gcloud

  1. 使用下列指令:

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