2017-03-07 58 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