当我尝试在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不断在文件夹顶部寻找内容(反复):
要运行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
在这个案例上我花了几个小时来理解和界定问题,我真的不明白发生了什么。如果有人可以和我一起研究这个案子,我将不胜感激。