Ate*_*ral 10 bash brace-expansion docker dockerfile
我在Dockerfile中运行以下RUN命令,期望在每个列出的子目录下创建"logs"目录:
RUN mkdir -p /opt/seagull/{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}/logs
Run Code Online (Sandbox Code Playgroud)
但是当我检查图像时,我看到一个字面上称为"{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env"的目录}"在/ opt/seagull下创建,而不是发生大括号扩展.
我能做错什么?
Ate*_*ral 18
你没有使用大括号扩展,因为你没有使用Bash.如果查看RUN命令的文档:
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" ]
Run Code Online (Sandbox Code Playgroud)
小智 6
如果/bin/bash在您的映像中可用,您可以更改 docker 构建系统用来执行您的RUN命令的 shell ,如下所示:
SHELL ["/bin/bash", "-c"]
Run Code Online (Sandbox Code Playgroud)
现在,您的RUN命令应该保持不变。
| 归档时间: |
|
| 查看次数: |
2422 次 |
| 最近记录: |