我想运行命令eval $(envkey-source)
,以使用envkey设置某些环境变量。我安装它,设置我的ENVKEY
变量,然后尝试导入所有环境变量。我全部通过Docker完成。但是,docker在此命令中给出了错误:
Step 31/35 : RUN eval $(envkey-source)
---> Running in 6a9ebf1ede96
/bin/sh: 1: export: : bad variable name
The command '/bin/sh -c eval $(envkey-source)' returned a non-zero code: 2
我尝试阅读envkey的文档,但他们对Docker一无所知。
我已经使用以下命令安装了envkey:
ENV ENVKEY=yada_yada
RUN curl -s https://raw.githubusercontent.com/envkey/envkey-source/master/install.sh | bash
直到这里,一切顺利。我在控制台上得到了有关如何运行envkey来获取所有环境变量设置的详细建议。 问题出在这方面:
RUN eval $(envkey-source)
错误:
Step 31/35 : RUN eval $(envkey-source)
---> Running in 6a9ebf1ede96
/bin/sh: 1: export: : bad variable name
The command '/bin/sh -c eval $(envkey-source)' returned a non-zero code: 2
答案 0 :(得分:0)
由于某些原因,您无法执行此操作。最终,envkey文档链接到an example in their GitHub,您可能会找到有用的信息。
每个Dockerfile RUN
命令在新容器中运行一个新的Shell。特别是,RUN
命令中设置的环境变量在退出后会丢失。 RUN export ...
的任何形式都是禁止操作的。如果变量是静态的,则可以使用ENV
指令设置它们,但是在这种情况下,如果您正在运行需要动态生成它们的程序,则需要另一种方法。
这里的典型模式是使用shell脚本作为容器的ENTRYPOINT
。进行一些初始设置,然后将其自身替换为容器的CMD
。由于CMD
与脚本的其余部分在相同的Shell环境中运行,因此您可以在此处进行动态变量设置。该脚本可能类似于:
#!/bin/sh
eval "$(envkey-source)"
exec "$@"
这里要记住的另一件事是,任何人都可以docker inspect
删除您的图像并将其环境变量取回,或者docker run imagename /usr/bin/env
。如果您可以在Dockerfile中运行envkey-source
,则环境变量将在图像中以明文形式显示,这违背了目的。甚至将密钥嵌入图像中也会有效地泄漏它。您应该在运行时使用docker run -e
选项或Docker Compose environment:
密钥传递此密码,并从主机环境进行中继。