验证Docker中的环境变量

时间:2018-07-06 10:20:43

标签: docker assert

Docker中有任何类型的ASSERT吗?

在这种特定情况下,我希望能够验证是否已设置环境变量,如果没有设置则强制构建失败。

导致我出现问题的代码是:

echo ${LICENSE_KEY} > /etc/license.key

我的任务是使上一位员工的代码正常工作,并且发现该文件为空。令我惊讶的是,未设置此变量对于此构建脚本应该是致命的,并且可以为我节省大量调试时间。

从对Docker文档的阅读(自Docker 0.7起)开始,我可以运行一个shell命令,该命令返回非零状态,这将导致构建失败。例如

RUN [ ! -z "${LICENSE_KEY}" ]

尽管这会导致映像中出现额外的层和代码,但对于其他人来说可能并不明显,因为它仅用于调试/保护,并且在与其他命令结合使用时未明确说明失败的原因。我真的很期待docker有类似的东西:

ASSERT ${LICENSE_KEY} != ""

2 个答案:

答案 0 :(得分:2)

这是我使用的解决方案,但是不创建任何图层的ASSERT会更好。

ARG LICENSE_KEY
RUN [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined

密码保护套

Step 2/10 : ARG LICENSE_KEY
 ---> Using cache
 ---> e5fba6cf457c
Step 3/10 : RUN [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined
 ---> Running in 7e83e02e7372
 Removing intermediate container 7e83e02e7372
 ---> c31d8da7b006

失败案例

Step 2/10 : ARG LICENSE_KEY
 ---> Using cache
 ---> e5fba6cf457c
Step 3/10 : RUN [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined
 ---> Running in 0d10210c8bca
The command '/bin/sh -c [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined' returned a non-zero code: 1

它肯定会创建额外的0字节层。从运行中可以看出:

docker history --no-trunc <image>

sha256:fe9<...snip...>   About an hour ago   |1 LICENSE_KEY=some-key /bin/sh -c [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined    0B
sha256:e5f<...snip...>   About an hour ago   /bin/sh -c #(nop)  ARG LICENSE_KEY                                                              0B                                                                                                                                                
sha256:5e8<...snip...>   4 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                            0B

答案 1 :(得分:1)

我有类似的问题,我做了类似的事情:

RUN [ ! -z "${LICENSE_KEY}" ] || { echo "License key cannot be empty"; exit 1; } && \
    ... other run commands ...