Dockerfile中插入TAB字符执行cd命令导致构建失败如何解决
Dockerfile构建失败原因
你遇到的错误由两个核心问题导致:
- 你使用的
no'\t'不是shell可识别的TAB字符转义写法。alpine默认使用ash作为shell,单引号包裹的\t会被识别为字面量的反斜杠和t字符,无法匹配带TAB的目录名,自然会提示目录不存在。 - Dockerfile中每一条
RUN指令都独立运行在新的shell进程,前一条RUN执行的目录切换操作不会对后续RUN生效,就算目录名写法正确,后续的make指令也会因为不在对应源码目录下执行失败。
解决方法
推荐优化写法(完全规避TAB问题)
直接用通配符匹配目录前缀,同时合并RUN指令减少镜像分层、清理冗余文件缩小体积:
FROM alpine RUN apk add --no-cache make wget gcc libc-dev WORKDIR /usr/local/bin RUN wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz && \ tar xzf noip-duc-linux.tar.gz && \ cd noip-* && \ make && \ make install && \ cd .. && rm -rf noip-duc-linux.tar.gz noip-*
强制使用TAB字符的写法
如果确实需要在shell中传入TAB字符,可以使用ANSI-C转义语法$'\t',示例如下:
RUN cd "no"$'\t'
内容的提问来源于stack exchange,提问作者cheyrico2
相关产品推荐
相关产品推荐

