Dockerfile中CMake无法识别Conda安装的libboost及环境变量异常
Docker构建问题:Boost查找失败与环境变量不生效的解决方法
我使用以下精简版Dockerfile构建应用:
FROM pangeo/pangeo-notebook:2024.04.08 AS base USER root # 安装依赖 RUN apt-get update && apt-get install -y vim gfortran sqlite3 libsqlite3-dev ... RUN mamba install -c conda-forge libboost -y #<--------------------------- libboost 安装 FROM base AS prebuild ... FROM prebuild AS app_clone WORKDIR /app RUN git clone ... FROM app_clone AS app_build ENV PATH=${PATH}:/usr/bin/mpich ENV PATH=/usr/bin:${PATH} #<-------------- 环境变量未在镜像中生效 ENV CC=/usr/bin/gcc #<------------- 环境变量未在镜像中生效 WORKDIR /app RUN cmake -G Ninja -B cmake_build_serial -S . && \ cmake --build cmake_build_serial --target all -- -j $(nproc)
由于需要至少1.79.0版本的libboost,我通过mamba安装。但遇到两个问题:
- 执行
docker build --no-cache --platform linux/amd64 -t test-app .构建时,CMake提示无法找到Boost;但注释最后一行cmake命令后,启动容器手动执行该编译命令却能正常完成。 - 进入容器后,设置的
CC环境变量未指向指定路径,PATH也未以/usr/bin作为前缀。
解决方案
修改Dockerfile,在执行cmake命令前,设置SHELL让后续RUN命令自动激活notebook环境:
# 让RUN命令使用notebook环境 SHELL ["mamba", "run", "--no-capture-output", "-n", "notebook", "/bin/bash", "-c"] RUN cmake -G Ninja -B cmake_build_serial -S . && \ cmake --build cmake_build_serial --target all -- -j $(nproc)
内容的提问来源于stack exchange,提问作者F Baig
相关产品推荐
相关产品推荐

