在容器外加载数据时,dockerized 闪亮的应用程序不起作用

Posted

技术标签:

【中文标题】在容器外加载数据时,dockerized 闪亮的应用程序不起作用【英文标题】:dockerized shiny app does not work when loading data outside of container 【发布时间】:2019-12-18 05:49:12 【问题描述】:

我有一个简单的闪亮应用程序,它从data 文件夹加载数据并生成交互式绘图。我将我闪亮的应用程序 docker 化了。我将data 文件夹放在容器中。 dockerized 应用程序可以成功部署在我的本地主机上。 这是我的global.r 文件:

library(shiny) 
library(dplyr)
df = readRDS('./data/mydata.rds')

最终我需要闪亮的应用程序从外部文件夹加载数据。所以我像这样更改了我的global.r 文件:

library(shiny) 
library(dplyr)
df = readRDS('c:/user/document/data/mydata.rds')

在这里,我希望应用程序从我的本地驱动器上的一个文件夹中加载数据。c:/user/document/data/。该应用程序可自行完美运行。但是在我对其进行 docker 化并尝试在 localhost 上运行 docker 映像之后。它失败了!

我似乎无法连接到 docker 容器外的文件夹?我是码头工人的新手。我很困惑……

有谁知道我如何让闪亮的应用程序连接并从 docker 容器外部的文件夹加载数据?来自本地驱动器上的文件夹或共享点文件夹或......?非常感谢!

【问题讨论】:

【参考方案1】:

Docker 容器无法从外部访问数据。您需要为此使用volumes。卷基本上充当主机和容器的公共存储。因此,在运行 docker 容器时,您需要指定主机路径和容器路径,如 docker run -v c:/username/document/data:c:/username/document/data image-name 另外,我假设您正在尝试运行 Windows 容器。

【讨论】:

非常感谢您的帮助!你能解释一下主机路径和容器路径吗?比如说,我包含 dockerfile 和 app 的文件夹是 c:/username/shinyapp,而我的外部数据文件夹是 c:/username/document/data。应用程序位于本地主机上。如何指定volume? @Praveen Rewar 我已经在我的回答中更新了 docker run 命令。另外,我假设你在 windows 上并且你正在使用 windows 容器。 抱歉,我没有看到您的回答有任何更新。你能用我提供的示例文件夹更新它吗?非常感谢! @Praveen Rewar 嘿,我真的很抱歉,我不确定它是如何没有更新的? 对不起,是吗?没有像C:/username/data 这样的非路径应该是主机路径?哪一个应该是容器路径? @Praveen Rewar

以上是关于在容器外加载数据时,dockerized 闪亮的应用程序不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 nginx 反向代理的 Docker 容器内的闪亮服务器不会遵循 301 重定向

将日志输出到Docker容器外

[Docker Compose定义运行多个Docker容器]

Docker闪亮服务器自动进入示例欢迎页面

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

将日志输出到Docker容器外