Dockerfile配置R环境-无法加载某些包

4

我在尝试通过dockerfile将R加载到我的Docker容器中。某些R包无法成功安装,例如rvest。我同时也在安装NiFi和Python。以下是我的dockerfile:

FROM apache/nifi

ADD run.sh .
COPY nifi-extracttext-nar-1.5.nar /opt/nifi/nifi-1.8.0/lib
USER root
RUN apt-get update
RUN apt-get install -y python3 python3-dev python3-pip
RUN pip3 install bs4
RUN pip3 install requests
RUN chmod 777 run.sh

# PROBLEM AREA (everything above works great)
RUN apt-get -y install r-base
RUN apt-get -y install libcurl4-openssl-dev
RUN apt-get install libcurl4-openssl-dev

#setup R configs

FROM r-base:latest
RUN Rscript -e "install.packages('tidyverse', repos = 'http://cran.us.r-project.org')"
RUN Rscript -e "install.packages('httr', repos = 'http://cran.us.r-project.org')"
RUN Rscript -e "install.packages('rvest', repos = 'http://cran.us.rproject.org')"

USER nifi

ENTRYPOINT ["./run.sh"]

问题点肯定是安装R本身以及我想要的软件包。如何正确格式化R软件包安装?我最初从此链接中提取了格式,但不确定Rscript是否正确。
在这里,rvest似乎是一个特别棘手的问题。
更新:
当我尝试在docker构建/运行后运行我的脚本时,我得到了这个错误:
Error in library(httr) : there is no package called ‘httr’
Execution halted

ERROR: dependency ‘openssl’ is not available for package ‘httr’
* removing ‘/usr/local/lib/R/site-library/httr’

为什么会发生这种情况?我是通过docker安装的。


以下是一些错误信息:

The downloaded source packages are in
'/tmp/RtmpykICxP/downloaded_packages'
Warning messages:
1: In install.packages("rvest", repos = "http://cran.us.r-project.org") :
installation of package 'openssl' had non-zero exit status
2: In install.packages("rvest", repos = "http://cran.us.r-project.org") :
installation of package 'xml2' had non-zero exit status
3: In install.packages("rvest", repos = "http://cran.us.r-project.org") :
installation of package 'httr' had non-zero exit status
4: In install.packages("rvest", repos = "http://cran.us.r-project.org") :
installation of package 'rvest' had non-zero exit status

And:

ERROR: configuration failed for package ‘xml2’
* removing ‘/usr/local/lib/R/site-library/xml2’
ERROR: dependency ‘openssl’ is not available for package ‘httr’
* removing ‘/usr/local/lib/R/site-library/httr’
ERROR: dependencies ‘xml2’, ‘httr’ are not available for package ‘rvest’
* removing ‘/usr/local/lib/R/site-library/rvest’

And:

ERROR: dependencies ‘xml2’, ‘httr’ are not available for package ‘rvest’

在通过终端爬行并构建图像后,我发现了这些错误。

1个回答

3
您需要为操作系统安装xml2openssl软件包。
RUN apt-get -y install xml2 openssl

请注意,-y指定了对apt-get install的肯定回答,因此您可以删除。
RUN apt-get install libcurl4-openssl-dev

与前一行相同,您可能还需要安装R包的依赖项。

例如,您可能希望为R软件包安装依赖项。

RUN Rscript -e "install.packages('tidyverse', repos = 'http://cran.us.r-project.org', dependencies=TRUE)"

希望这有所帮助。

那么删除整个 RUN apt-get install libcurl4-openssl-dev 行吗?我指的是第二行。另外,我需要保留 FROM r-base:latest 吗?非常感谢您的帮助。 - papelr
1
我不认为需要FROM行,因为我已经很久没有使用docker了。你可以删除RUN行,因为前一行已经完成了同样的操作。不同之处在于,你指定了“-y”来表示对所有安装请求进行“是”的确认(通常你需要交互式地按下“y”键同意!)。 - bruce.moran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接