Cloud Build构建Docker镜像时传递环境变量与参数的问题排查
Cloud Build构建Docker容器时环境变量传递问题排查与修复
问题根源梳理
- Cloud Build构建参数传递错误:
cloudbuild.yaml里的--build-arg=ENV=$_PID不符合Dockerfile定义的参数名,Dockerfile中声明的ARG是_PID,必须匹配才能正确传递变量。 - 脚本环境变量引用语法错误:
script.sh里的$(PROJECT_ID)是执行命令的语法,而读取环境变量应该用$PROJECT_ID;同时Dockerfile里设置的环境变量是PJID,和脚本里的PROJECT_ID不对应。 - 构建阶段输出的查看误区:Dockerfile中
RUN echo的内容是在镜像构建阶段执行的,运行容器时不会输出,要到Cloud Build的构建日志里才能查看。
修正后的文件内容
1. Dockerfile(调整环境变量名匹配脚本)
FROM ubuntu:latest ARG _PID ENV PROJECT_ID=$_PID # 改为PROJECT_ID,和脚本变量名对齐 COPY script.sh / RUN echo "The ENV variable value is $PROJECT_ID" # 同步修改变量名 RUN chmod +x /script.sh ENTRYPOINT ["/script.sh"]
2. script.sh(修正环境变量引用语法)
#!/bin/bash echo "Hello, world! The new time is $(date)." echo "$PROJECT_ID" # 用$直接引用环境变量,而非命令执行语法
3. cloudbuild.yaml(修正Build Arg参数名)
steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-docker-repo/test:tag1','--build-arg=_PID=$_PID', '.' ] # 传递正确的ARG参数名_PID images: - 'gcr.io/$PROJECT_ID/quickstart-docker-repo/test:tag1' substitutions: _PID: $PROJECT_ID options: logging: CLOUD_LOGGING_ONLY
验证方式
- 查看构建阶段的
RUN echo输出:登录Cloud Build控制台,找到对应构建任务,查看构建日志就能找到该语句的输出内容。 - 运行容器验证脚本输出:拉取镜像运行后,会得到类似如下的正确输出:
Hello, world! The new time is Mon Jul 17 11:39:31 UTC 2023. [你的GCP项目ID]
内容的提问来源于stack exchange,提问作者Amarjeet Kushwaha
相关产品推荐
相关产品推荐

