【发布时间】:2019-04-25 14:42:46
【问题描述】:
我有一个使用 Packrat 的闪亮项目。当我创建一个 Rocker-shiny Docker 容器时,我将命令放入 Dockerfile 以安装 packrat 包和恢复库。但是,我看到 packrat 将包安装到系统库(/usr/local/lib/R/...)而不是私有项目库中。如果我进入 bash docker 的控制台并在项目目录中启动 R 会话,然后读取 .Rprofile 文件并安装 packrat 并开始将包安装到私有库中。我如何从 Dockerfile 中获取此信息?
在我的 Dockerfile 中:
RUN cd /srv/shiny-server && \ R -e 'install.packages("packrat" , repos="http://cran.us.r-project.org"); packrat::restore()'
将软件包安装到 /usr/local/lib/R... 出了什么问题。
但是,如果我进入 docker bash 并在我的项目目录中启动一个 R 会话,它工作正常:
docker exec -it test_app bash
cd /srv/shiny-server
R # start R session into project dir
Packrat is not installed in the local library -- attempting to bootstrap an installation...
> Installing packrat into project private library:
- "/srv/shiny-server/packrat/lib/x86_64-pc-linux-gnu/3.5.3"
* installing *source* package ‘packrat’ ...
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (packrat)
> Attaching packrat
> Restoring library
Installing plyr (1.8.1) ... OK (built source)
【问题讨论】:
-
如果你的项目是 dockerised,安装东西到系统库有什么问题?
-
我不知道原因,但它没有将 packrat.lock 文件中的所有软件包安装到系统库中。例如,在创建 docker 容器时,我看到所有包是如何构建和安装的,但随后一些包丢失并且我的应用程序崩溃了。
-
要建立在@KonradRudolph 的评论上,通常你确实想将东西安装到你的Dockerfile中的“系统”路径中:它在设置环境时省去了很多麻烦变量和备用路径。