Docker容器中未找到模块和二进制文件
我正在尝试使用自己的一些代码设置Docker容器。它是一些Fortran代码,对grib文件中的数据进行一些计算。这不是问题。我需要在Docker容器中编译一个依赖项。当我构建容器时,它编译得很好,但是我不知道模块在哪里。它们不在通常的/usr/local中 在构建容器时,我通过查找“grib_dump”搜索了一些二进制文件,这是一个可从eccodes执行的文件,但运气不佳 我正在使用这个Dockerfile。我对Docker没有太多经验,所以我可能违反了一些最佳实践Docker容器中未找到模块和二进制文件,docker,cmake,Docker,Cmake,我正在尝试使用自己的一些代码设置Docker容器。它是一些Fortran代码,对grib文件中的数据进行一些计算。这不是问题。我需要在Docker容器中编译一个依赖项。当我构建容器时,它编译得很好,但是我不知道模块在哪里。它们不在通常的/usr/local中 在构建容器时,我通过查找“grib_dump”搜索了一些二进制文件,这是一个可从eccodes执行的文件,但运气不佳 我正在使用这个Dockerfile。我对Docker没有太多经验,所以我可能违反了一些最佳实践 FROM ubuntu:1
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y install build-essential cmake wget
# HDF5
RUN apt-get -y install libhdf5-serial-dev
# NetCDF4
RUN apt-get -y install libnetcdf-dev
# gfortran
RUN apt-get -y install gfortran
RUN wget https://confluence.ecmwf.int/download/attachments/45757960/eccodes-2.13.1-Source.tar.gz
RUN tar -xzf eccodes-2.13.1-Source.tar.gz
ENV ECCODES_DIR /usr/local
RUN mkdir ecbuild && cd ecbuild && cmake -DCMAKE_INSTALL_PREFIX=$ECCODES_DIR ../eccodes-2.13.1-Source
RUN apt-get -y install python3-pip
# pip
RUN pip3 install schedule
RUN pip3 install netCDF4
RUN pip3 install f90nml
RUN ls $ECCODES_DIR
RUN grib_dump
WORKDIR /kfapp
COPY . /kfapp
RUN make
当我跑步时:
RUN ls $ECCODES_DIR
RUN grib_dump
$ECCODES\u DIR中没有任何内容,并且找不到grib\u转储。我需要从eccodes链接模块文件,但我不知道在哪里可以找到它们,因为它们不在$eccodes_DIR中。您可以在
/ecbuild
在/usr/local
中找不到任何内容,因为在执行cmake
命令后,您没有运行make
和make install
以下是来自以下方面的示例:
PS:您也不需要设置
CMAKE\u INSTALL\u前缀
,因为/usr/local
是默认值我不知道可以设置ARG而不是ENV。我喜欢总是设置CMAKE_INSTALL_前缀,这样我总是可以直接看到它。出于某种原因,我完全忘记了make和make安装。这确实奏效了!是的,ARG
有助于在构建阶段使用变量
> tar -xzf eccodes-x.y.z-Source.tar.gz
> mkdir build ; cd build
> cmake -DCMAKE_INSTALL_PREFIX=/path/to/where/you/install/eccodes ../eccodes-x.y.z-Source
...
> make
> ctest
> make install