在容器外加载数据时,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 Compose定义运行多个Docker容器]