2017-01-11 88 views
2

看起来是因为法律原因,Java无法在Docker镜像中单独安装,而是必须使用Java镜像。无法在Docker镜像中安装R软件包

我使用的是Java的图像,安装,因为我需要它R,然而,当我安装的R包我得到一个错误

这里是我下面的Dockerfile:

FROM buildpack-deps:jessie-scm 

# A few problems with compiling Java from source: 
# 1. Oracle. Licensing prevents us from redistributing the official JDK. 
# 2. Compiling OpenJDK also requires the JDK to be installed, and it gets 
#  really hairy. 

RUN apt-get update && apt-get install -y --no-install-recommends \ 
     bzip2 \ 
     unzip \ 
     xz-utils \ 
    && rm -rf /var/lib/apt/lists/* 

# Default to UTF-8 file.encoding 
ENV LANG C.UTF-8 

# add a simple script that can auto-detect the appropriate JAVA_HOME value 
# based on whether the JDK or only the JRE is installed 
RUN { \ 
     echo '#!/bin/sh'; \ 
     echo 'set -e'; \ 
     echo; \ 
     echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \ 
    } > /usr/local/bin/docker-java-home \ 
    && chmod +x /usr/local/bin/docker-java-home 

ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 

ENV JAVA_VERSION 7u111 
ENV JAVA_DEBIAN_VERSION 7u111-2.6.7-2~deb8u1 

RUN set -x \ 
    && apt-get update \ 
    && apt-get install -y \ 
     openjdk-7-jdk="$JAVA_DEBIAN_VERSION" \ 
    && rm -rf /var/lib/apt/lists/* \ 
    && [ "$JAVA_HOME" = "$(docker-java-home)" ] 

# If you're reading this and have any feedback on how this image could be 
# improved, please open an issue or a pull request so we can discuss it! 

# system libraries of general use 
RUN apt-get update && apt-get install -y \ 
    sudo \ 
    pandoc \ 
    pandoc-citeproc \ 
    libcurl4-gnutls-dev \ 
    libcairo2-dev \ 
    libxt-dev \ 
    libssl-dev \ 
    libssh2-1-dev \ 
    libssl1.0.0 

# system library dependency for the euler app 
RUN apt-get update && apt-get install -y \ 
    libmpfr-dev 

RUN sudo apt-get install -y \ 
    r-base r-base-dev 

# basic shiny functionality 
RUN R -e "install.packages(c('shiny', 'rmarkdown'), repos='https://cloud.r-project.org/')" 

# install dependencies 
RUN R -e "install.packages('Rmpfr', repos='https://cloud.r-project.org/')" 

# Special Package 
RUN R -e "install.packages('shiny')" 
RUN R -e "install.packages('shinydashboard')" 
RUN R -e "install.packages('plyr')" 
RUN R -e "install.packages('dplyr')" 
RUN R -e "install.packages('ggplot2')" 
RUN R -e "install.packages('tm')" 
RUN R -e "install.packages('SnowballC')" 
RUN R -e "install.packages('wordcloud')" 
RUN R -e "install.packages('RWeka')" 
RUN R -e "install.packages('reshape2')" 
RUN R -e "install.packages('igraph')" 



# copy the app to the image 
RUN mkdir /root/testapp1 
COPY testapp1 /root/testapp1 

COPY Rprofile.site /usr/lib/R/etc/ 

EXPOSE 3838 

CMD ["R", "-e shiny::runApp('/root/testapp1')"] 

当我尝试安装任何R包我得到这个错误如下:

> install.packages('shiny') 
Installing package into ‘/usr/local/lib/R/site-library’ 
(as ‘lib’ is unspecified) 
Error in contrib.url(repos, type) : 
    trying to use CRAN without setting a mirror 
Calls: install.packages -> grep -> contrib.url 
Execution halted 
The command '/bin/sh -c R -e "install.packages('shiny')"' returned a non-zero code: 1 

我该如何解决这个问题的头痛。

感谢。

回答

3

当在R环境中执行install.packages('shiny')时,它会挂起,要求您从要下载的镜像中进行选择。

> install.packages('shiny') 

Installing package into ‘/Users/user/Library/R/3.3/library’ 
(as ‘lib’ is unspecified) 

--- Please select a CRAN mirror for use in this session --- 
HTTPS CRAN mirror 

1: 0-Cloud [https]     
2: Algeria [https] 
... 
55: (HTTP mirrors) 

Selection: 

根据你的错误输出似乎命令 RUN R -e "install.packages(c('shiny', 'rmarkdown'), repos='https://cloud.r-project.org/')"

和下一个被执行,然后失败(错误退出1)当尝试执行:

RUN R -e "install.packages('shiny')"

改为提供install.packages('shiny', repos='https://cloud.r-project.org/')可能会在不询问任何内容的情况下进行静默安装。

+0

我在这里遇到了一些相同的问题,任何人都可以提供帮助吗?https://stackoverflow.com/questions/47486994/how-to-run-r-script-in-docker –

2

看起来像你得到的错误是从install.pacakges没有指定repos参数的方法。

当我在本地机器上用dockerfile更新install.packagesrepos='http://cran.us.r-project.org/'时,图像已成功构建。