在没有Shiny服务器的Docker中运行Shinyapp

时间:2018-05-22 20:37:44

标签: r docker shiny

我试图在Docker中运行一个Shiny应用程序,我看到了两种方法:

1)在Docker中运行Shiny服务器,然后在此服务器上运行Shiny app。它有效,但我仍然很难通过Shiny应用程序显示用户目录(使用-v参数进行简单安装并没有帮助)。

2)使用命令R -e "shiny::runApp('/srv/shiny-server/')"直接在Docker上运行Shiny。在这种情况下,它几乎可以工作,但我收到了这个错误:

shiny::runApp('/srv/shiny-server/', launch.browser = T)
Loading required package: shiny
Listening on http://127.0.0.1:4637
/usr/bin/xdg-open: 844: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 844: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 844: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 844: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 844: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 844: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'http://127.0.0.1:4637'

我尝试安装浏览器(将apt-get install -y firefox添加到我的Dockerfile中),但它仍然无法正常工作。

我无法找到关于如何在没有Shiny Server的情况下在Docker上运行Shiny应用程序的任何教程/示例。所以我很感激任何帮助!

1 个答案:

答案 0 :(得分:2)

在第二种方法中,R进程尝试在 docker容器中打开浏览器,因为它认为它是以交互方式使用的。更改此设置的一种简单方法是使用Rscript -e ...代替R -e ...。或者,您可以将launch.browser参数设置为FALSE

此外,您应该将闪亮的应用程序绑定到任何IP地址上的固定端口,并在启动docker容器时将该端口发布到主机。您可以使用参数port = 3838host = "0.0.0.0"执行此操作。

您可以通过添加

来使用R的选项机制,而不是通过参数指定这些内容
options(shiny.port = 3838, shiny.host = "0.0.0.0", shiny.launch.browser = FALSE) 

Rprofile.site