Bash大括号扩展无法在Dockerfile RUN命令上运行

时间:2016-10-20 21:13:13

标签: bash docker dockerfile brace-expansion

我在我的Dockerfile中运行以下RUN命令,期待" log"要在每个列出的子目录下创建的目录:

RUN mkdir -p /opt/seagull/{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}/logs

但是当我检查图像时,我看到一个名为" {diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro的目录-env,XCAP-ENV}"在/ opt / seagull下创建,而不是支撑扩展。

我可能做错了什么?

2 个答案:

答案 0 :(得分:14)

你没有使用大括号扩展,因为你没有使用Bash。如果你看一下documentation for the RUN command

  

RUN(shell格式,命令在shell中运行,默认情况下是Linux上的/ bin / sh -c或Windows上的cmd / S / C)

还有:

  

注意:要使用不同于“/ bin / sh”的shell,请使用传入所需shell的exec表单。例如,RUN [“/ bin / bash”,“ - c”,“echo hello”]

因此,只需更改命令即可使用exec表单并显式使用Bash shell:

RUN [ "/bin/bash", "-c", "mkdir -p /opt/seagull/{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}/logs" ]

答案 1 :(得分:2)

如果图像中有/bin/bash,则可以更改docker构建系统用来执行RUN命令的shell,如下所示:

SHELL ["/bin/bash", "-c"]

现在,您的RUN命令应该保持不变。