问题描述
我正在尝试使用 Dockerfile 在我的 RStudio Docker映像中安装'rJava'
软件包:
FROM rocker/tidyverse:3.6.1
RUN mkdir -p /rstudio
RUN mkdir -p /rscripts
RUN apt-get update && \
apt-get install -y openjdk-11-jdk && \
apt-get install -y liblzma-dev && \
apt-get install -y libbz2-dev
RUN R -e "install.packages(c('rJava','mailR'))"
此SO post之后,我在apt-get
命令中添加了以上部分,但仍然出现相同的错误:
java库: '-L / usr / lib / jvm / java-8-openjdk-amd64 / jre / lib / amd64 / server -ljvm' 检查Java运行时是否正常... ./configure:3766行: / usr / bin / java:没有这样的文件或目录,没有配置:错误:Java 解释器“ / usr / bin / java”不起作用错误:配置失败 包“ rJava”
因此缺少文件或目录,但我不知道应该进行哪些更改。
[编辑1]:
因此,按照Dirk的建议,我进入了rstudio容器并运行了apt-get install r-cran-rjava
,这似乎很有效。
但是,当我安装rJava
软件包时,出现了新错误:
错误:无法编译简单的JNI程序。确保您有Java 已安装开发套件并在R中正确注册。如果有疑问, 以根用户身份重新运行“ R CMD javareconf”。
我试图再次在容器中输入并运行R CMD javareconf
,但这并没有改变错误。我还尝试了在此article上找到的以下命令:
sudo apt-get install default-jre
sudo apt-get install default-jdk
但是我仍然得到:
无法编译简单的JNI程序。
解决方法
这是我在Debian / Ubuntu上下文中已经给出的类似答案的重复。使用Docker的事实并不重要:您应该 still 只需安装二进制文件!
edd@rob:~$ docker run --rm -ti r-base bash
root@ef4bb9726a21:/# apt update -qq
73 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@ef4bb9726a21:/# apt install --no-install-recommends -y r-cran-rjava
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
ca-certificates-java default-jre default-jre-headless java-common libasound2 libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libdbus-1-3 libdrm-amdgpu1 libdrm-common
libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libedit2 libgif7 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 liblcms2-2 libllvm10 libnspr4 libnss3 libpciaccess0 libpcsclite1
libsensors-config libsensors5 libsqlite3-0 libvulkan1 libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxdamage1 libxfixes3 libxi6 libxshmfence1 libxtst6 libxxf86vm1 libz3-4
openjdk-11-jre openjdk-11-jre-headless
[.... many lines skipped ....]
Running hooks in /etc/ca-certificates/update.d...
done.
done.
root@ef4bb9726a21:/# R
R version 4.0.3 (2020-10-10) -- "Bunny-Wunnies Freak Out"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
[...some lines skipped...]
Type 'demo()' for some demos,'help()' for on-line help,or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(rJava)
>
,
我找到了一个github存储库,建议在安装R软件包rJava
之前在Dockerfile中添加以下步骤,并且可以正常工作:
RUN apt-get -y update && apt-get install -y \
default-jdk \
r-cran-rjava \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/
,
Dirk 的答案对您不起作用的原因是因为您使用的是 rocker/tidyverse
,而不是 Dirk 正在使用的 r-base
。
在 Docker Hub 上的 rocker/tidyverse
documentation 中,他们不鼓励使用 apt install --no-install-recommends -y r-cran-rjava
:
不要使用 apt-get install r-cran-*
在此堆栈上安装 R 包。请求的 R 版本和所有 R 包都从版本稳定堆栈中的源代码安装。从 apt 安装 R 包(例如 r-cran-* 包)将安装 R 版本和为稳定的 debian 版本构建的包的版本(例如 debian:stretch),为您提供第二个 R 版本和不同的版本包。请使用 install.packages() R 函数(或 install2.r 脚本)从源代码安装 R 包,并且仅使用 apt 安装必要的系统库(例如 libxml2)。如果您只想使用 apt-get 安装来自预构建二进制文件的最新版本的软件包,请考虑改用 r-base 堆栈。
由于 rJava
应该与 apt install r-cran-rjava
一起安装,但是 rocker/...
基础映像明确告诉您不要这样做,看来您将无法使用 {{ 1}} 与任何 rJava
基本图像..