在 compose 中取消设置环境变量

Reu*_*ani 6 docker docker-compose

我有一个需要两个环境变量的 Dockerfile:

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
Run Code Online (Sandbox Code Playgroud)

我使用以下命令通过我的撰写文件从主机传递它们:

build:
  # ...
  args:
    - AWS_ACCESS_KEY_ID
    - AWS_SECRET_ACCESS_KEY
Run Code Online (Sandbox Code Playgroud)

我的问题是,在某些流中有一个 IAM 角色集(并且没有环境变量),我不想使用环境变量。但即使它们在主机上不存在,它们似乎在构建过程中也被设置为空字符串。

我试过这个:

run if [ -z "$AWS_ACCESS_KEY_ID" ]; then unset AWS_ACCESS_KEY_ID; fi
run if [ -z "$AWS_SECRET_ACCESS_KEY" ]; then unset AWS_SECRET_ACCESS_KEY; fi

run env # see if set
Run Code Online (Sandbox Code Playgroud)

但它不起作用(即使未在主机环境中设置,变量仍然设置)。

我欢迎在构建 docker 时混合 env vars 和 IAM 角色的另一种解决方案。

atl*_*ine 1

不同之处run在于Dockerfile不互相影响,为了实现您的目标,建议将它们合并为一个run,如下所示,仅供参考:

run if [ -z "$AWS_ACCESS_KEY_ID" ]; then unset AWS_ACCESS_KEY_ID; fi && \
  if [ -z "$AWS_SECRET_ACCESS_KEY" ]; then unset AWS_SECRET_ACCESS_KEY; fi && \
  env
Run Code Online (Sandbox Code Playgroud)

然后,你会发现AWS_ACCESS_KEY_ID中 no 被设置为空值env

并且,在尝试时,建议使用docker-compose build --no-cache来测试。

最后,为什么你会看到空值?

我做了一个实验,好像如果在 中没有ENV设置Dockerfile,同时env for this variable set在 HOST 中没有设置,则在 docker build 时会自动更改为ARGin ,因为没有设置值,所以它是空的。Dockerfileone ENV variableARG