在Docker容器中找不到模块和二进制文件

时间:2019-09-05 07:41:53

标签: docker cmake

我正在尝试使用自己的一些代码设置一个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中时,我不知道在哪里可以找到它们。

1 个答案:

答案 0 :(得分:2)

您可以在/ecbuild中找到您的构建文件 您没有在/usr/local中找到任何内容,因为您没有在make命令后运行make installcmake

这里是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是默认