如何让 dockerize 闪亮的应用程序从本地驱动器加载数据(在主机上)

Posted

技术标签:

【中文标题】如何让 dockerize 闪亮的应用程序从本地驱动器加载数据(在主机上)【英文标题】:how to let dockerized shinyapp load data from local drive (on host machine) 【发布时间】:2019-12-25 05:53:06 【问题描述】:

我做了一个简单的闪亮应用。它从我本地驱动器上的文件夹中读取一个名为mydata.rds 的数据集。

我本地驱动器上的数据每天都在更新

该应用程序在我的 rstudio 上作为独立应用程序完美运行。下面是global.r 文件。

## global.r
 library(shiny)
 data = readRDS("/path_to_local_folder/mydata.rds")  

然后我成功构建了一个 shinyapp docker 映像。

我运行了如下所示的 docker 镜像。它不起作用。

docker run --rm  -p 80:80 myshinyapp

所以我尝试挂载本地文件夹并像这样运行 docker 映像“

docker run --rm -v /path_to_local_folder/:/srv/shiny-server/  -p 80:80 myshinyapp

我在localhost 上得到的是:

Index of/

 mydata.rds

有谁知道为什么在上述两种情况下都会发生这种情况?安装音量时我做错了什么?

我正在尝试做的是将我的 dockerized shinyapp 连接到一些每天都更新的本地数据文件夹。我想要的是当 docker 启动一个容器时,它会从主机上的数据文件夹中加载数据。 (我实际上是在尝试将我的应用程序托管在带有 shinyproxy 服务器的主机上)。

非常感谢有关我如何实现这一目标的说明。

注意:当我简单地将我的应用程序和数据打包到 docker 映像中并运行它时。该应用程序运行良好。我的应用程序似乎没有任何问题。

【问题讨论】:

这里没有看到真正的问题,错误是什么? 您是否正在从 绝对 路径读取 RDS 文件,指向物理位置,而不是从相对路径读取?在您的 dockerized shinyapp 中,路径将是 /srv/shiny-server/mydata.rds @MrGrumble 我编辑了问题以便更好地解释。 @MrGrumble 我没有复制数据文件夹。因为我假设它会使容器变大,不是有效的方法吗?我希望该应用程序是具有闪亮代理服务器的主机上的多用户可扩展应用程序。只希望应用程序到达主机上的数据文件夹。数据每天都在变化。感谢您的详细回答。 【参考方案1】:

当您将本地文件夹挂载到容器时,/srv/shiny-server/ 中的文件和文件夹将被隐藏,直到您移除挂载。

因此您不必在通过docker cp 命令启动容器后挂载卷和复制文件或修改您的shinyapp 镜像的Dockerfile 以将您需要的文件从主机复制到镜像中,以便您在启动后找到它容器。

或按照指示here。

【讨论】:

非常感谢您的回答。对不起,我编辑了这个问题,以便更清楚地解释它。我的数据文件夹每天都在更新。请再看一遍。如果我修改 Dockerfile,这会反映容器启动时的变化吗?我想如果我这样做,容器会变大,因为它会加载数据文件夹。可能不是有效的方法吗?谢谢。 @艾哈迈德阿拉法 我在我的项目中遇到了这个问题,并通过在挂载卷后执行 bash 脚本将文件复制到目录来解决它,请查看:github.com/Ahmed-M-Arafa/nginx-php-mariadb-alpine

以上是关于如何让 dockerize 闪亮的应用程序从本地驱动器加载数据(在主机上)的主要内容,如果未能解决你的问题,请参考以下文章

如何从闪亮的应用程序访问 bigquery

docker化时如何让golem应用程序生成日志?

如何部署使用本地数据的闪亮应用

如何防止我的 Shiny App 在开源闪亮服务器中断开连接?

AWS Elastic Beanstalk 上的闪亮服务器与 Docker

尝试在本地浏览器中查看时,Docker R Shiny app 0.0.0.0 拒绝连接