本頁說明如何為 Cloud Run 服務設定容器埠、進入點指令和引數。
Cloud Run 啟動容器時,會執行映像檔的預設進入點指令和預設指令引數。如要覆寫映像檔的預設進入點和指令引數,可以使用容器設定中的 command 和 args 欄位。command 欄位會指定容器執行的實際指令。args 欄位則指定傳遞至該指令的引數。
請注意,每個服務的每個容器最多可有 1000 個引數。
必要的角色
如要取得設定及部署 Cloud Run 服務所需的權限,請要求管理員授予下列 IAM 角色:
- Cloud Run 開發人員 (
roles/run.developer) 在 Cloud Run 服務上 - 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser)
如果您要從原始碼部署服務或函式,您也必須在專案和 Cloud Build 服務帳戶中獲得額外角色。
如要查看與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
設定服務的容器通訊埠
任何設定變更都會建立新的修訂版本。除非您明確更新以變更設定,否則後續修訂版本也會自動採用這項設定。
如果是 Cloud Run 服務,Cloud Run 會將 PORT 環境變數注入容器。如果您將多個容器部署至服務,這就是輸入容器。容器會監聽 PORT 環境變數定義的通訊埠,而非特定硬式編碼通訊埠。如不可行,請設定在將要求傳送至容器的通訊埠上進行監聽。請注意,通訊埠設定「不」適用於 Cloud Run 工作。
控制台
前往 Google Cloud 控制台的 Cloud Run:
從 Cloud Run 導覽選單中選取「服務」:
如要設定新服務,請按一下「Deploy container」(部署容器),然後填寫初始服務設定頁面。然後按一下「容器、網路、安全性」,展開服務設定頁面。
如要設定現有服務,請按一下該服務。
按一下「容器」分頁標籤。
指定要將要求傳送至哪個連接埠 (如果不是預設值
8080)。這也會設定PORT環境變數。按一下「建立」建立新服務。按一下「查看差異並重新部署」,然後點選現有服務的「部署變更」。
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
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
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 個半形字元
- 開頭為「
使用下列指令,以新設定取代服務:
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:要傳送要求的通訊埠。
部署服務
如要部署服務,請執行
gcloud run compose up指令:gcloud run compose up compose.yaml回應所有提示,安裝必要元件或啟用 API。
y選用:公開發布服務 允許未經驗證的存取要求。
部署完成後,系統會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看執行中的容器。您可以透過 Google Cloud 控制台停用預設驗證。
設定進入點和引數
任何設定變更都會導致系統建立新的修訂版本。除非您明確更新以變更設定,否則後續修訂版本也會自動採用這項設定。
指定的容器指令和引數會覆寫預設映像檔的 ENTRYPOINT 和 CMD。
建立新服務或部署新修訂版本時,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 檔案,設定進入點指令和引數:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從 Cloud Run 導覽選單中選取「服務」:
如要設定新服務,請按一下「Deploy container」(部署容器),然後填寫初始服務設定頁面。然後按一下「容器、網路、安全性」,展開服務設定頁面。
如要設定現有服務,請按一下該服務。
按一下「容器」分頁標籤。
指定容器要執行的指令 (如果不是容器中定義的指令),並視需要指定進入點指令的引數。
按一下「建立」建立新服務。按一下「查看差異並重新部署」,然後點選現有服務的「部署變更」。
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
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
command和args屬性: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。
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定的google_cloud_run_v2_service 資源中新增下列項目:上述 google_cloud_run_v2_service 資源會指定指令和引數。將 /server 替換為用於啟動容器的指令,並在 args 陣列中新增任何必要引數。
撰寫
如要在 compose.yaml 檔案中指定進入點和引數,請在服務定義中新增 entrypoint 或 command 屬性。
services: web: image: IMAGE entrypoint: ["COMMAND"] command: ["ARG1", "ARG-N"]
更改下列內容:
- IMAGE:容器映像檔的網址。
- COMMAND:容器啟動時要執行的指令。
- ARG1:傳送至容器指令的引數。
部署服務
如要部署服務,請執行
gcloud run compose up指令:gcloud run compose up compose.yaml回應所有提示,安裝必要元件或啟用 API。
y選用:如要允許未經驗證的使用者存取服務,請公開服務。
部署完成後,系統會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看執行中的容器。您可以從 Google Cloud 控制台停用預設驗證。
在引數中使用等號或半形逗號
如果在引數中使用等號,請按照下列格式提供引數:
gcloud run deploy \
--args="--repo-allowlist=github.com/example/example_demo"
如果引數使用半形逗號,請參閱「設定環境變數」,瞭解如何逸出這些引數。
設定目前使用的目錄
目前使用的目錄是容器執行指令和引數的位置。部署新服務或現有服務時,您可以為容器程序指定自訂目前使用的目錄。如未指定,系統會使用容器映像檔的預設工作目錄。如要將這個欄位重設為預設值,請傳遞空白字串或移除欄位。
例如:
gcloud
如要更新現有服務的工作目錄,請按照下列步驟操作:
gcloud run services update SERVICE --workdir WORKING_DIR
更改下列內容:
- WORKING_DIR:容器目前使用的目錄。如未指定,系統會使用容器映像檔的預設值。如要將這個欄位重設為預設值,請傳遞空白字串
""。
如要在部署新服務或現有服務時指定目前使用的目錄,請按照下列步驟操作:
gcloud run deploy --image IMAGE_URL --workdir 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。- WORKING_DIR:容器目前使用的目錄。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
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 個半形字元
- 開頭為「
使用下列指令,以新設定取代服務:
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。
設定 sidecar 部署作業的容器啟動順序
如要在側車部署作業中指定容器啟動順序,請使用容器依附元件功能。您指定任何具有依附元件的容器,並列出這些容器依附的容器:這些容器會先啟動。系統一律會先啟動沒有任何依附元件的容器,並同時啟動。
如要順利使用這項功能,請務必使用啟動健康檢查探針。Cloud Run 會透過啟動探測檢查依附容器的健康狀態,確保容器成功通過檢查,再啟動下一個容器。如果不使用健康狀態檢查,即使容器依附的容器無法啟動,容器仍會按照指定順序啟動。
請注意,Ingress 容器有預設的啟動健康狀態檢查探測。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 指定啟動順序:
控制台
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
- 如要查看現有服務,請按一下該服務,然後按一下「Containers」(容器)。
- 如要建立新服務,請按一下「Deploy container」(部署容器),顯示「Create service」(建立服務) 表單。
如要建立新服務,請指定服務名稱、輸入容器網址、CPU 分配、輸入控管和驗證。在「Containers, Networking, Security」(容器、網路、安全性) 分頁中,執行下列操作:
- 設定輸入容器。
- 如要新增部署的其他容器,請按一下「新增容器」。
- 除了輸入容器以外,請為所有容器設定啟動健康狀態檢查。Ingress 容器具有預設的啟動健康狀態檢查。
- 如果容器必須先啟動其他容器才能啟動,請使用「容器啟動順序」選單選取必須先啟動的容器。
如要為現有服務執行這項操作,請按照下列步驟操作:
- 除了輸入容器以外,請為所有容器設定啟動健康狀態檢查。輸入容器預設會進行啟動健康狀態檢查。
- 每個容器都會顯示自己的「容器啟動順序」選單。如果容器需要其他容器先啟動才能啟動,請使用「Container startup order」(容器啟動順序) 選單,選取必須先啟動的容器。
完成其他必要設定。按一下「建立」建立新服務。按一下「查看差異並重新部署」,然後點選現有服務的「部署變更」。 等待部署完成。
gcloud
使用 Google Cloud CLI 指定啟動順序前,請務必為所有容器 (不含 ingress 容器) 設定啟動健康狀態檢查。輸入容器預設會執行啟動健康狀態檢查。您無法使用 Google Cloud CLI 設定健康狀態檢查。
-
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
如要將多個容器部署至服務,並指定啟動順序,請執行下列指令:
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
如果您要建立新服務,請略過這個步驟。如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
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 則最後啟動。
使用下列指令,以新設定取代服務:
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:邊車容器映像檔的網址。
部署服務
如要部署服務,請執行
gcloud run compose up指令:gcloud run compose up compose.yaml請按照提示
y安裝必要元件或啟用 API。選用:如要允許未經驗證的使用者存取服務,請公開服務。
部署完成後,系統會顯示 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:依附於 CONTAINER1 和 CONTAINER2 的容器名稱。
查看容器設定
如要查看 Cloud Run 服務目前的容器設定,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
按一下您感興趣的服務,開啟「Service details」(服務詳細資料) 頁面。
按一下「容器」分頁標籤即可查看設定。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的設定中找出容器設定。