[英]Bash brace expansion not working on Dockerfile RUN command
我在我的 Dockerfile 中运行以下 RUN 命令,期望在每个列出的子目录下创建一个“日志”目录:
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 下创建,而不是进行大括号扩展。
我可能做错了什么?
您没有使用大括号扩展,因为您没有使用 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" ]
如果/bin/bash
在您的映像中可用,您可以更改 docker 构建系统用于执行RUN
命令的 shell,如下所示:
SHELL ["/bin/bash", "-c"]
现在,您的RUN
命令应该保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.