繁体   English   中英

Bash 大括号扩展不适用于 Dockerfile RUN 命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM