/usr/local/lib64/R/lib/libR.so:不能打开共享目标文件:没有这样的文件



我在lambda上通过docker制作图像时遇到此错误。

** [ERROR] OSError: cannot load library '/usr/local/lib64/R/lib/libR。所以":/usr/local/lib64/R/lib/libR.so:无法打开共享对象文件:No such file or directory**

码头工人文件:

FROM public.ecr.aws/lts/ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y wget
RUN apt-get install -y software-properties-common
RUN apt-get install -y gcc gfortran build-essential
RUN apt-get update
RUN apt-get install -y libcurl4-openssl-dev
RUN apt-get install -y zlib1g zlib1g-dev libbz2-dev liblzma-dev libpcre++-dev libpango1.0-dev 
xorg-dev 
libreadline-dev
RUN wget -c https://cran.r-project.org/src/base/R-3/R-3.5.0.tar.gz && tar -xf R-3.5.0.tar.gz
RUN cd R-3.5.0 && ./configure --with-readline=no --with-x=no && make && make install
RUN R -e "install.packages('remotes', repos = 'http://cran.us.r-project.org')"
RUN R -e "require(remotes)"
RUN R -e "remotes::install_version('text2vec', version = '0.5.1', repos = 'http://cran.us.r-project.org')"
RUN export LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
COPY requirements.txt ./
RUN apt-get update && apt-get install -y 
python3.8 
python3-pip
RUN pip3 install -r requirements.txt
RUN pip3 install 
awslambdaric
RUN ln -s /usr/lib64/R/lib/* /usr/local/lib64/R/lib/
COPY lambda_function.py ./
ENTRYPOINT [ "/usr/bin/python3", "-m", "awslambdaric" ]
CMD ["lambda_function.lambda_handler"]

任何帮助将不胜感激!

我清理了你的Dockerfile的第一部分

FROM public.ecr.aws/lts/ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y 
wget 
software-properties-common 
gcc gfortran build-essential 
libcurl4-openssl-dev 
zlib1g zlib1g-dev libbz2-dev liblzma-dev libpcre++-dev libpango1.0-dev 
xorg-dev 
libreadline-dev && 
apt-get clean && 
rm -rf /var/lib/apt/lists/*
RUN wget -c https://cran.r-project.org/src/base/R-3/R-3.5.0.tar.gz && 
tar -xf R-3.5.0.tar.gz && 
cd R-3.5.0 && 
./configure --with-readline=no --with-x=no --enable-R-shlib && 
make -j && make install

将所有apt-get放到一个RUN中,可以通过删除apt缓存文件来进行清理。使用make -j并行构建R,这可以显著加快构建速度。

然后构建它,并使用bash启动生成的映像,以查看libR.so确实存在。
$ docker build .
...
Successfully built f1d83e97e8ef
$ docker run -it --rm f1d83e97e8ef bash
root@add29666d5d5:/# ls -l /usr/local/lib64/R/lib
total 21984
-rwxr-xr-x 1 root root 16815248 Sep  5 14:43 libR.so
-rwxr-xr-x 1 root root   462896 Sep  5 14:43 libRblas.so
-rwxr-xr-x 1 root root  5226296 Sep  5 14:43 libRlapack.so

libR.so存在,且权限(读取和执行)都是合适的

我不认为导出LD_LIBRARY_PATH或者创建符号链接是必要的。

最新更新