我有一个需要两个环境变量的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角色的另一种解决方案。
答案 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
未设置值,因此为空。