如何在GCP Cloud Build的cloudbuild.yaml中正确传递CLI部署参数
问题原因
你遇到的错误是因为Cloud Run部署时,--args参数里的"-c dev_config api"被当成了单个完整的可执行文件名,而不是拆分后传递给ENTRYPOINT ["./quivr"]的参数。系统会尝试寻找名为quivr -c dev_config api的文件,自然找不到。
解决方案
修改cloudbuild.yaml中Cloud Run部署步骤的args配置,把每个CLI参数单独拆分成数组元素,而不是放在同一个字符串里:
steps: # Build the container image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-f', 'dev.Dockerfile', '-t', 'gcr.io/quivr-test/quivr-api', '.'] # Push the container image to Container Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/quivr-test/quivr-api'] # Deploy container image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: [ 'run', 'deploy', 'quivr-api', '--image', 'gcr.io/quivr-test/quivr-api', '--region', 'us-central1', '--platform', 'managed', '--args', '-c', 'dev_config', 'api' # 拆分每个参数为独立数组项 ] images: - 'gcr.io/quivr-test/quivr-api'
为什么本地运行正常?
本地docker run命令中,-c dev_config api是直接跟在镜像名后面的参数,Docker会自动将这些参数拆分后传递给镜像的ENTRYPOINT。但Cloud Run的--args要求每个参数必须作为独立的数组项,不能合并成一个字符串,否则会被识别为单个可执行文件路径。
这样修改后,Cloud Run会正确将-c、dev_config、api作为参数传递给./quivr,和你本地运行的效果一致,同时也支持后续修改不同的CLI选项。
内容的提问来源于stack exchange,提问作者Z. Fralish
相关产品推荐
相关产品推荐

