如何防止packrat在Docker内部的系统库中安装软件包?

时间:2019-04-25 14:42:46

标签: r linux docker

我有一个使用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)

1 个答案:

答案 0 :(得分:0)

我遇到了相同的问题,并通过将docker-compose文件中的packrat软件包还原来解决了该问题:

docker-compose.yml:

...
command: [sh,-c, "sudo Rscript config/packrat_restore.R"]
...

packet_restore.R:

packrat::init(
  infer.dependencies = FALSE,
  enter = TRUE,
  restart = FALSE)
packrat::restore()

由于此解决方法将始终延迟我的容器在生产中的启动,因此我仍将尝试解决Dockerfile本身中的问题...