我正在尝试用我自己的一些代码来设置一个Docker容器。这是一些Fortran代码,它对来自grib文件的数据进行一些计算。这不是问题。一个依赖项是eccodes,我需要在Docker容器中编译它。当我构建容器时,它可以很好地编译,但我不知道模块在哪里。它们不在通常的/usr/local中。
在构建容器时,我通过查找"grib_dump“来搜索一些二进制文件,这是eccodes中的一个可执行文件,但没有运气。
我正在使用这个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中时,我不知道在哪里可以找到它们。
发布于 2019-09-05 15:53:57
您可以在/ecbuild中找到构建文件,但在/usr/local中找不到任何文件,因为您不会在cmake命令后运行make和make install
下面是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 installPS:您也不需要设置CMAKE_INSTALL_PREFIX,因为/usr/local是默认设置
https://stackoverflow.com/questions/57800649
复制相似问题