Docker RUN mkdir -p创建目录带大括号问题解决咨询
解决Dockerfile中
mkdir大括号扩展失效的问题 Docker默认的RUN命令使用sh执行,而sh不支持bash的大括号扩展语法,所以你输入的logs/{shell,security,errors}会被当作单个目录名处理,生成带大括号的目录。可以用以下几种方法修复:
显式调用bash处理命令:
将RUN命令改为:RUN bash -c 'mkdir -p logs/{shell,security,errors}'
通过bash -c让bash解析大括号扩展,从而创建三个子目录。直接列出所有目标目录:
放弃大括号语法,直接写出所有子目录路径,兼容性更强:RUN mkdir -p logs/shell logs/security logs/errors
这种方式不依赖特定shell的扩展特性,在任何环境下都能正常工作。设置默认shell为bash(适合基础镜像自带bash的场景):
在Dockerfile开头添加SHELL指令,指定后续RUN命令用bash执行:SHELL ["/bin/bash", "-c"] RUN mkdir -p logs/{shell,security,errors}这样后续所有
RUN都会使用bash,大括号扩展就能正常生效了。
内容的提问来源于stack exchange,提问作者Daniel Baker
相关产品推荐
相关产品推荐

