我正在尝试构建一个小的R容器,该容器为要在Google Compute Engine的Docker容器中运行的代码安装一些软件包。
我需要安装(例如)jsonlite
在我的dockerfile中是执行此操作的一行:
RUN Rscript -e 'install.packages("jsonlite", repo="http://cran.ma.imperial.ac.uk/")'
但是,当我尝试在计算引擎上构建包含此行的dockerfile时,它没有安装。源tarball已下载到/ tmp / Rsomething,但实际上并未安装该软件包。我必须在tarball上手动运行
R CMD INSTALL
,安装成功。当我在本地相同的dockerfile上运行
docker build .
时,一切正常,并且软件包已正确安装。AFAIK,这不是2-3个月前发生的-不久前,我已经成功完成了缓存构建。
这里有什么问题? R是docker还是计算引擎,还是这三者的混合体?
我当前的解决方法是添加
RUN find /tmp/ -name '*.tar.gz' -exec R CMD INSTALL '{}' \;
到docker文件的末尾,但如果未按正确的顺序找到tarball,则似乎已在它们的依赖项之前安装了某些东西(有时),这将不起作用。
最佳答案
问题是docker实例本身陷入了某种不良状态。看到一些意外的错误消息(有关http:///var/run/...
的信息)后,我重新启动了主机,然后一切按预期进行。