如何通过Cloud Build部署Cloud Run时向Python程序传参?
解决Cloud Run部署时传入变量给Python代码的问题
问题原因
你用--args='_arg1=${_Value}'导致启动失败,是因为Cloud Run的--args参数会完全替换Dockerfile中的CMD指令。原来的CMD是启动uvicorn,但添加该参数后,容器会把_arg1=${_Value}当成要执行的可执行文件,自然找不到它,所以报错。
正确方案
方案1:用环境变量传递(推荐,适合给Python代码用的变量)
直接通过--set-env-vars参数注入环境变量,Python代码可以直接读取,不需要修改Dockerfile:
gcloud run deploy YOUR_SERVICE_NAME \ --image YOUR_IMAGE_URL \ --set-env-vars _arg1=your_target_value
在Python代码中通过os模块获取:
import os arg1_value = os.getenv("_arg1")
方案2:用--args传递命令行参数(仅当需要给Uvicorn加参数时用)
如果确实要给Uvicorn命令添加参数,需要把完整的启动命令作为--args的内容,替换原来的CMD:
gcloud run deploy YOUR_SERVICE_NAME \ --image YOUR_IMAGE_URL \ --args="uvicorn src.api:app --host 0.0.0.0 --port \$PORT --arg1 your_value"
注意:这里用\$PORT防止本地shell解析该变量,让容器内部使用自身的PORT环境变量。
或者用逗号分隔参数的写法(避免shell转义问题):
gcloud run deploy YOUR_SERVICE_NAME \ --image YOUR_IMAGE_URL \ --args="uvicorn,src.api:app,--host,0.0.0.0,--port,\$PORT,--arg1,your_value"
内容的提问来源于stack exchange,提问作者schoon
相关产品推荐
相关产品推荐

