使用Docker安装rJava软件包

使用Docker安装rJava软件包,java,r,docker,dockerfile,rjava,Java,R,Docker,Dockerfile,Rjava,我正在尝试使用我的Dockerfile在我的RStudiodocker映像中安装'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 &&a

我正在尝试使用我的Dockerfile在我的RStudiodocker映像中安装
'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'))"
在此之后,我使用
apt get
命令添加了上述部分,但仍然得到相同的错误:

java库: “-L/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server-ljvm” 正在检查Java运行时是否工作/配置:第3766行: /usr/bin/java:没有这样的文件或目录没有配置:错误:java 解释器“/usr/bin/java”不工作错误:配置失败 对于“rJava”包

所以有一个丢失的文件或目录,但我不知道我应该做什么更改

[编辑1]:

因此,按照Dirk的建议,我进入了rstudio容器,运行了
apt get install r-cran-rjava
,这似乎有效。
但是,当我安装
rJava
软件包时,我遇到了一个新错误:

错误:无法编译简单的JNI程序。确保你有Java 在R中安装并正确注册开发工具包。如有疑问, 以root用户身份重新运行“R CMD javareconf”

我试图再次进入容器并运行
R CMD javareconf
,但这并没有改变错误。我还尝试了在此服务器上找到的以下命令:

但我仍然得到:

无法编译简单的JNI程序


这是我在Debian/Ubuntu上下文中给出的类似答案的副本。您正在使用Docker这一事实并不重要:您仍然应该简单地安装二进制文件

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)
> 

这是我在Debian/Ubuntu上下文中给出的类似答案的副本。您正在使用Docker这一事实并不重要:您仍然应该简单地安装二进制文件

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 repo建议在安装R package
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/

我发现一个github repo建议在安装R package
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/

德克的答案不适用于你的原因是你使用了
rocker/tidyverse
作为基本图像,而不是德克使用的
r-base

在on Docker Hub中,他们不鼓励使用
apt安装--不建议安装-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-基栈来代替。
由于
rJava
应该与
apt install r-cran-rJava
一起安装,但是
rocker/..
基本图像明确告诉您不要这样做,看起来您将无法将
rJava
与任何
rocker/..
基本图像一起使用。

Dirk的答案对您不起作用的原因是,您使用
rocker/tidyverse
作为基本图像,而不是Dirk使用的
r-base

在on Docker Hub中,他们不鼓励使用
apt安装--不建议安装-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-基栈来代替。
由于
rJava
应该与
apt install r-cran-rJava
一起安装,但是
rocker/..
基本图像明确告诉您不要这样做,看起来您将无法将
rJava
与任何
rocker/..
基本图像一起使用。

我在docker文件中添加了这一行:
运行apt get install r-cran-rJava
但它给了我命令“/bin/sh-c apt get install r-cran-rJava”返回了一个非零代码:1当我编写
docker compose时-d
Docker的好处在于,您可以将其放入容器中,然后尝试我建议的命令,以便调试它。尽管我从一个稍微不同的基本容器开始,但我在上面展示的内容“对我有用”。但是
r-cran-rjava
应该始终可以安装。谢谢,我用附加信息编辑了我的帖子。我在docker文件中添加了这一行:
RUN apt get install r-cran-rjava
但它给了我命令“/bin/sh-c apt get install r-cran-rjava”返回了一个非零代码:1当我执行
docker compose up-d
时,docker的优点是你可以直接进入你的应用程序容器,只需尝试我推荐的命令即可调试。尽管我从一个稍微不同的基本容器开始,但我在上面展示的内容“对我有用”。但是
r-cran-rjava
应该总是可以安装的。谢谢,我用附加信息编辑了我的帖子。