Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker容器中未找到模块和二进制文件_Docker_Cmake - Fatal编程技术网

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

Docker容器中未找到模块和二进制文件,docker,cmake,Docker,Cmake,我正在尝试使用自己的一些代码设置Docker容器。它是一些Fortran代码,对grib文件中的数据进行一些计算。这不是问题。我需要在Docker容器中编译一个依赖项。当我构建容器时,它编译得很好,但是我不知道模块在哪里。它们不在通常的/usr/local中 在构建容器时,我通过查找“grib_dump”搜索了一些二进制文件,这是一个可从eccodes执行的文件,但运气不佳 我正在使用这个Dockerfile。我对Docker没有太多经验,所以我可能违反了一些最佳实践 FROM ubuntu:1

我正在尝试使用自己的一些代码设置Docker容器。它是一些Fortran代码,对grib文件中的数据进行一些计算。这不是问题。我需要在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\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