在Docker中从R调用外部程序时出现问题

时间:2018-12-26 01:40:06

标签: r docker shiny phantomjs

当我尝试在docker容器内的闪亮应用中使用webshot时遇到一些问题。 取决于我如何组织Shinyapp,有时有时效果很好。

我创建了一个包含2个功能的reprex(Dockerfile + R包), 使用run_app2一切正常,我可以从一个音标中得到一个png文件 使用run_app时,对phantomjs的调用停留在开头。什么也没发生

webshot启动这种指令(使用callr包):

/usr/local/bin/phantomjs --ignore-ssl-errors=true /usr/local/lib/R/site-library/webshot/webshot.js [{"url":"/tmp/RtmpIObg1n/dygraph8103063cd.html","file":"/tmp/RtmpIObg1n/file84a4d60a.png","vwidth":992,"vheight":744,"delay":0.2,"zoom":1,"debug":true}]

使用run_app2,一切都很好,但是使用run_app phantomjs无法启动!

在容器内使用unix strace函数,我发现了此错误,表明phantomjs不断在文件夹顶部寻找内容(反复):

strace phantomjs output

要运行reprex,请使用此Dockerfile

FROM rocker/tidyverse

RUN apt-get install -y openjdk-8-jre && R CMD javareconf
RUN apt update
RUN apt install -y htop strace nano bzip2
RUN R -e 'install.packages("remotes")'
RUN R -e 'install.packages("pacman")'
RUN R -e "pacman::p_load('webshot')"
RUN R -e 'webshot::install_phantomjs()'
RUN R -e "pacman::p_load('dygraphs')"
RUN R -e "pacman::p_load('shiny')"
RUN echo 'local({options(shiny.port = 3838, shiny.host = "0.0.0.0")})' >> /usr/local/lib/R/etc/Rprofile.site
RUN R -e 'remotes::install_github("VincentGuyader/webshotdocker")'
EXPOSE 3838
CMD R -e 'reprexsnapshot::run_app()'

然后

docker build -t reprex .

然后

 # OK
 docker run  -p 80:3838 reprex R -e 'reprexsnapshot::run_app2()'

 # not OK
 docker run  -p 80:3838 reprex R -e 'reprexsnapshot::run_app()'

提示:您可以添加-cap-add=SYS_PTRACE --security-opt seccomp=unconfined以便能够在容器内使用strace

在这个案例上我花了几个小时来理解和界定问题,我真的不明白发生了什么。如果有人可以和我一起研究这个案子,我将不胜感激。

0 个答案:

没有答案