Docker镜像构建报错:执行mkdir与make命令失败求助
解决Docker构建时SUMO源码编译make Error 2问题
问题分析
构建Docker镜像时,编译SUMO 1.18.0源码的make步骤返回Error 2,但日志被截断,无法获取具体失败原因。这类问题通常和编译环境缺失依赖、源码损坏、资源不足或日志输出不全有关。
排查与解决步骤
1. 获取完整编译日志
当前Docker构建日志仅显示最终的make失败信息,看不到具体模块的编译错误。可通过两种方式获取完整日志:
- 修改构建命令:添加
--progress=plain参数,强制输出完整构建过程:docker build --no-cache --progress=plain --build-arg USER_ID=012023 --build-arg GROUP_ID=012023 -t traffic-control:latest C:\Users\name\github\rl_traffic_control\traffic_control - 调整Dockerfile的make命令:暂时使用单线程编译(
-j1),避免多线程导致日志被覆盖:RUN mkdir sumo-1.18.0/build/cmake-build && cd sumo-1.18.0/build/cmake-build \ && cmake ../.. && make -j1
2. 补全编译依赖
SUMO源码编译需要一系列基础开发工具和库,若使用Debian/Ubuntu系基础镜像,在下载SUMO源码前添加以下命令安装依赖:
RUN apt-get update && apt-get install -y --no-install-recommends \ gcc g++ cmake \ libxerces-c-dev libfox-1.6-dev libgdal-dev libproj-dev libgl2ps-dev \ && rm -rf /var/lib/apt/lists/*
若为CentOS/RHEL系镜像,替换为yum install对应包(如gcc-c++ cmake3 xerces-c-devel fox-devel gdal-devel proj-devel gl2ps-devel)。
3. 确保SUMO源码完整性
管道直接解压curl下载的包可能因网络问题损坏源码,修改下载命令为先保存文件再解压:
RUN curl -L https://sumo.dlr.de/releases/1.18.0/sumo-src-1.18.0.tar.gz -o sumo-src.tar.gz \ && tar -xzf sumo-src.tar.gz \ && rm sumo-src.tar.gz
4. 调整编译参数
- 若容器资源不足导致多线程编译失败,先用
make -j1完成编译,确认成功后再尝试多线程(-j$(nproc))。 - 在cmake时指定编译模式,避免默认模式的潜在问题:
RUN mkdir sumo-1.18.0/build/cmake-build && cd sumo-1.18.0/build/cmake-build \ && cmake -DCMAKE_BUILD_TYPE=Release ../.. && make -j1
内容的提问来源于stack exchange,提问作者Makye Daniels
相关产品推荐
相关产品推荐

