我正在尝试使用自己的一些代码设置一个Docker容器。这是一些Fortran代码,可以对grib文件中的数据进行一些计算。那不是问题。依赖项是eccodes,我需要在Docker容器中进行编译。在构建容器时,它可以很好地编译,但是我不知道模块在哪里。它们不在通常的/ usr / local中。
在构建容器时,我通过寻找“ grib_dump”来搜索一些二进制文件,该文件是eccode中的一个可执行文件,但是没有运气。
我正在使用此Dockerfile。我在Docker方面没有太多经验,所以也许我违反了一些最佳实践。
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_DIR中没有任何内容,并且找不到grib_dump。我需要从eccodes链接模块文件,但是当它们不在$ ECCODES_DIR中时,我不知道在哪里可以找到它们。
答案 0 :(得分:2)
您可以在/ecbuild
中找到您的构建文件
您没有在/usr/local
中找到任何内容,因为您没有在make
命令后运行make install
和cmake
这里是Docs的示例:
> 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
PS:您也不需要设置CMAKE_INSTALL_PREFIX
,因为/usr/local
是默认