我在我的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下创建,而不是支撑扩展。
我可能做错了什么?
答案 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
命令应该保持不变。