取消撰写时的环境变量

时间:2018-10-09 07:38:40

标签: docker docker-compose

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

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY

我正在使用以下命令将它们从主机传递到我的撰写文件中:

build:
  # ...
  args:
    - AWS_ACCESS_KEY_ID
    - AWS_SECRET_ACCESS_KEY

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

我已经尝试过了:

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

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

在构建docker时,我欢迎使用混合环境变量和IAM角色的另一种解决方案。

1 个答案:

答案 0 :(得分: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

然后,您将发现AWS_ACCESS_KEY_ID中没有将env设置为空值。

而且,尝试时,建议使用docker-compose build --no-cache进行测试。

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

我做了一个实验,似乎如果ENV中没有设置Dockerfile,同时主机中没有env for this variable set,则ARG中的Dockerfile会自动在docker构建时更改为one ENV variable,因为ARG未设置值,因此为空。