在摇滚/诗歌上用rstan构build一个Docker镜像

我打算在tidyverse . rmarkdown在Digital Ocean的Docker 17.03.0-ce on 16.04预装一个定制的Rstudio,同时使用tidyversermarkdownrstan

在Docker Hub上,已经有了一个预先构buildtidyverse图像:具有tidyversermarkdownfunction的Rocker/verse 。 所以我的计划是简单地获取最新版本的Rocker/verse并添加一个新的rstan层。 我使用jonzelner / rstan和jrnold / 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 

不过,我试图构build这个图像( 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的包的一些类似问题与内存有关,所以我试图增加本地机器上的Docker内存,但仍然没有运气。 有什么事情可以做,以成功地build立这个形象?

正如您在错误输出中看到的那样,安装过程找不到编译器:

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

请注意,这是试图在rocker/verse容器中安装clang-3.6的输出:

 root@8ea0d98e67c3:/# 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 ; python绑定的Python编程语言。

除非你绝对想要3.6,否则我会安装指向3.5的plain clang包,然后重新运行Docker构build过程。

 apt-get install clang 
Interesting Posts