2017-03-07 54 views
1

我打算運行一個定製的Rstudio,其中tidyverse,和rstan預裝在Digital Ocean的Docker 17.03.0-ce on 16.04上。用rstan在搖桿/詩句上構建Docker圖像

在Docker Hub上,已經有一個預建的圖像:Rocker/verse具有tidyverse和的功能。所以我的計劃是簡單地獲取最新版本的Rocker/verse並添加一個新層rstan。我使用的jonzelner/rstanjrnold/rstan的dockerfile和如下更新它們:

FROM rocker/verse:latest 

# Install essentials 
RUN apt-get update \ 
    && apt-get install -y --no-install-recommends \ 
        clang-3.6 

# Global site-wide config 
RUN mkdir -p $HOME/.R/ \ 
    && echo "\nCXX=clang++ -ftemplate-depth-256\n" >> $HOME/.R/Makevars \ 
    && echo "CC=clang\n" >> $HOME/.R/Makevars 

# Install rstan 
RUN install2.r --error \ 
    inline \ 
    RcppEigen \ 
    StanHeaders \ 
    rstan \ 
    KernSmooth 

# Config for rstudio user 
RUN mkdir -p /home/rstudio/.R/ \ 
    && echo "\nCXX=clang++ -ftemplate-depth-256\n" >> /home/rstudio/.R/Makevars \ 
    && echo "CC=clang\n" >> /home/rstudio/.R/Makevars \ 
    && echo "CXXFLAGS=-O3\n" >> /home/rstudio/.R/Makevars \ 
    && echo "\nrstan::rstan_options(auto_write = TRUE)" >> /home/rstudio/.Rprofile \ 
    && echo "options(mc.cores = parallel::detectCores())" >> /home/rstudio/.Rprofile 

# Install loo 
RUN install2.r --error \ 
    matrixStats \ 
    loo 

然而,我試圖建立這一形象(docker build -t image_name .)在錯誤結束。以下提供的結果:

Sending build context to Docker daemon 2.56 kB 
Step 1/6 : FROM rocker/verse:latest 
---> 7ad7d994bffd 
Step 2/6 : RUN apt-get update && apt-get install -y --no-install-recommends     clang-3.6 
---> Using cache 
---> 77473c759438 
Step 3/6 : RUN mkdir -p $HOME/.R/  && echo "\nCXX=clang++ -ftemplate-depth-256\n" >> $HOME/.R/Makevars  && echo "CC=clang\n" >> $HOME/.R/Makevars 
---> Using cache 
---> a5b06d28b9fe 
Step 4/6 : RUN install2.r --error  inline  RcppEigen  StanHeaders  rstan  KernSmooth 
---> Running in 86b52d5a76f3 
trying URL 'https://cran.rstudio.com/src/contrib/inline_0.3.14.tar.gz' 
Content type 'unknown' length 18002 bytes (17 KB) 
================================================== 
downloaded 17 KB 

* installing *source* package ‘inline’ ... 
** package ‘inline’ successfully unpacked and MD5 sums checked 
** R 
** inst 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
* DONE (inline) 

The downloaded source packages are in 
    ‘/tmp/downloaded_packages’ 
trying URL 'https://cran.rstudio.com/src/contrib/RcppEigen_0.3.2.9.0.tar.gz' 
Content type 'unknown' length 1209128 bytes (1.2 MB) 
================================================== 
downloaded 1.2 MB 

* installing *source* package ‘RcppEigen’ ... 
** package ‘RcppEigen’ successfully unpacked and MD5 sums checked 
** libs 
clang++ -ftemplate-depth-256 -I/usr/local/lib/R/include -DNDEBUG -I/usr/local/include -I"/usr/local/lib/R/site-library/Rcpp/include" -I../inst/include -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c RcppEigen.cpp -o RcppEigen.o 
/bin/bash: clang++: command not found 
/usr/local/lib/R/etc/Makeconf:141: recipe for target 'RcppEigen.o' failed 
make: *** [RcppEigen.o] Error 127 
ERROR: compilation failed for package ‘RcppEigen’ 
* removing ‘/usr/local/lib/R/site-library/RcppEigen’ 
Error in install.packages(pkgs = f, lib = lib, repos = if (isMatchingFile(f)) NULL else rep, : 
    installation of package ‘RcppEigen’ had non-zero exit status 
The command '/bin/sh -c install2.r --error  inline  RcppEigen  StanHeaders  rstan  KernSmooth' returned a non-zero code: 1 

大約有non-zero exit status有內存做一個包中的一些類似的問題,所以我想提高我的本地計算機上的內存泊塢窗,但仍沒有運氣。我能做些什麼來成功構建這個圖像嗎?

回答

0

正如你在錯誤輸出中看到,在安裝過程中無法找到編譯:

/bin/bash: clang++: command not found 

請注意,這是試圖在一個rocker/verse容器安裝clang-3.6輸出:

[email protected]:/# apt-get install -y --no-install-recommends clang-3.6 
Reading package lists... Done 
Building dependency tree  
Reading state information... Done 
Note, selecting 'python-clang-3.6' for regex 'clang-3.6' 
0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded. 

看起來這個圖片在它的倉庫中沒有出現Clang 3.6。而這個名字改爲python-clang-3.6; Clang綁定Python編程語言。

除非你絕對想要3.6,否則我會安裝指向3.5的普通clang包,然後重新運行Docker構建過程。

apt-get install clang