You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用buildah执行Dockerfile指令时CMake步骤报错该如何解决?

问题根因

  • 每个RUN指令都是独立的shell进程,执行结束后会自动重置工作目录为全局配置的WORKDIR(也就是你设置的$HOME)。你在前一个RUN会话中执行的cd build仅当次生效,执行RUN cmake ../时工作目录已经回到了$HOME,因此../指向的是/home目录,自然找不到对应的CMakeLists.txt。
  • 额外存在两处错误配置:
    1. 不能用RUN ENV的格式设置环境变量,ENV本身就是Dockerfile的原生独立指令,不需要加RUN前缀
    2. 出现的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:48:02