2017-01-11 87 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/'時,圖像已成功構建。