我正在使用Google Cloud Container Builder来构建我的图片。我将它连接到我的GitHub存储库,以便通过推送到特定分支来触发它。 我明确地使用介词为我的构建步骤提供了一些env变量。
cloudbuild.yaml
steps:
...
- name: gcr.io/cloud-builders/docker
args: ['build', '-t', 'eu.gcr.io/${PROJECT_ID}/project-name:${SHORT_SHA}', '.']
env:
- 'TEST_ENV=test123'
- 'TEST=${_TEST}'
...
Dockerfile
FROM alpine:latest
RUN printenv
...
我可以在Env的构建细节中看到我的env变量。触发构建时,此构建步骤的Vars部分:TEST_ENV=test123 TEST=test_prepositon
但是当执行RUN printenv
时,我只看到HOSTNAME, SHLVL, HOME, PATH, PWD
env vars。
我的错误在哪里?提前谢谢。
答案 0 :(得分:1)
您的示例是将环境变量传递给docker
命令,但不传递给docker构建上下文。
当您通过env
设置环境变量时,这些envvars会在正在运行的容器中设置。但是当docker执行docker build
时,它默认情况下不会将环境传递给构建上下文。
要设置环境变量,以便可以通过RUN
指令在构建上下文中访问它们,请传递docker build
--build-arg
。
Here is Docker's documentation关于设置构建时变量。
答案 1 :(得分:1)
这是您要查找的内容的完整示例。
cloudbuild.yaml:
steps:
- name: "gcr.io/cloud-builders/docker"
args: [
"build",
"-t",
"gcr.io/$PROJECT_ID/$REPO_NAME:$SHORT_SHA",
".",
"--build-args", "SOME_ARG=${_VAR_NAME_FROM_GOOGLE_TRIGGERS}"
]
Dockerfile:
ARG SOME_ARG
ENV SOME_ENV_VAR_NAME=${SOME_ARG}
可以在docker容器中直接访问变量SOME_ENV_VAR_NAME
此外,我想添加2篇很棒的文章来解释docker arg和env: