使用buildah执行Dockerfile指令时CMake步骤报错该如何解决?
问题根因
- 每个
RUN指令都是独立的shell进程,执行结束后会自动重置工作目录为全局配置的WORKDIR(也就是你设置的$HOME)。你在前一个RUN会话中执行的cd build仅当次生效,执行RUN cmake ../时工作目录已经回到了$HOME,因此../指向的是/home目录,自然找不到对应的CMakeLists.txt。 - 额外存在两处错误配置:
- 不能用
RUN ENV的格式设置环境变量,ENV本身就是Dockerfile的原生独立指令,不需要加RUN前缀 - 出现的SHELL相关警告是因为buildah默认构建OCI格式镜像,不支持自定义SHELL指令,如果你需要保留自定义SHELL配置,可以在执行buildah build时添加
--format docker参数即可消除警告,该警告不影响核心构建逻辑,也可以直接忽略。
- 不能用
修正后的配置
你可以将所有连续的构建操作合并到同一个RUN指令中,确保目录切换生效:
##install cmake USER root RUN apt-get update && apt-get -y install cmake USER ${user} WORKDIR $HOME ## bustools_dev RUN git clone https://github.com/Yenaled/bustools.git && \ cd bustools && \ mkdir build && \ cd build && \ cmake ../ && \ make && \ cd src && \ mv bustools bustools_dev ENV PATH=$HOME/bustools/build/src/:${PATH}
可选更清晰的写法
你也可以用WORKDIR指令全局切换工作目录,避免长链RUN指令,后续所有指令都会继承WORKDIR的路径:
##install cmake USER root RUN apt-get update && apt-get -y install cmake USER ${user} WORKDIR $HOME ## bustools_dev RUN git clone https://github.com/Yenaled/bustools.git WORKDIR $HOME/bustools/build RUN cmake ../ && make WORKDIR $HOME/bustools/build/src RUN mv bustools bustools_dev ENV PATH=$HOME/bustools/build/src/:${PATH}
内容的提问来源于stack exchange,提问作者ankit agrawal
相关产品推荐
相关产品推荐

