我搜索了很长时间,尝试了许多建议的解决方案,但没有找到解决我问题的最终方案,我希望我可以陈述足够具体的问题,因为我对整个docker世界还不陌生。
好,就这样:
docker容器在脱机服务器上运行(基于centOS,我认为不重要)
我们在本地拉docker映像(在Windows机器上也没关系),然后在脱机服务器上上传并启动它们
对于rstudio(rocker)有时会带来不便,因为无法通过install.packages('pkgname')下载新软件包,而必须将tar.gz下载为具有所有依赖项,然后上载并安装;可行
但是某些软件包还需要安装其他软件,那么我们的解决方法将停止工作
在特定情况下,我要安装spacyr pcakage,该软件包可以下载并安装miniconda
在本地有效,并且我的工作流程将被(编辑)
docker pull rocker/rstudio
docker container run -d -e PASSWORD=... -p 28787:8787 rocker/rstudio
docker exec -ti some_name /bin/bash
R
install.packages('spacyr')
library(spacyr)
spacy_install()
q()
exit
docker stop some_name
docker commit some_name rstudio_spacyr
docker save
,然后再使用docker load
-sudo docker run -d -e PASSWORD=...--rm -p -e ROOT=TRUE 38787:8787
rstudio_spacyr 现在是问题所在:可以通过library(spacyr)
加载spacyr,但是以前工作的spacy_install()
现在不再显示错误消息:
Finding a python executable with spaCy installed...
Error in set_spacy_python_option(python_executable, virtualenv, condaenv, :
spaCy or language model en is not installed in any of python executables.
但是,如果我进入Rstudio终端并键入sudo ls /root/miniconda/bin
,我会看到所有内容。因此,我的提交似乎有效,但是在没有ls: cannot access '/root/miniconda/bin': Permission denied
的sudo结果的情况下,我没有root权限作为命令。
奇怪的是,如果我使用sudo R
从Rstudio终端启动R,那么一切都会按预期进行。不幸的是,我们需要它在Rstudio中工作,而不仅仅是在R中工作。
我试图做的事情(而且我知道其中一些事情很可怕):
使用chmod更改根文件夹的权限
运行system("sudo -i")
->会导致tty错误消息
system('su -')
->产生su: must be run from a terminal
现在我真的不知道如何准确地解决这个问题,我将不胜感激。
我怀疑我可能必须在docker commit步骤中更改某些内容?还是应该真正操纵权限和用户?也许我也可以研究miniconda的安装方式,并将其更改为不在root用户中?但是如何?
非常感谢您阅读和评论!