在 docker (tidyverse) 中挂载 R/RStudio 可访问的本地卷

Posted

技术标签:

【中文标题】在 docker (tidyverse) 中挂载 R/RStudio 可访问的本地卷
【英文标题】:Mount local volume accessible to R/RStudio in docker (tidyverse)在 docker (tidyverse) 中挂载 R/RStudio 可访问的本地卷
【发布时间】:2018-07-04 01:52:13
【相关技术】:@tags@
【问题描述】:

关于如何从 docker 容器中处理本地文件夹,有很多不受欢迎的问题,但我找不到与我的完全匹配的问题,所以这里有另一个问题:

如何运行 docker 容器,并挂载本地文件夹,以便容器内的 R/RStudio 可以访问它?

听起来有点像:mounting local home directory in Rstudio docker?,使用类似的方法,我可以启动一个容器并挂载一个卷:

docker run -d -p 8787:8787 -v $HOME/my_folder:/LOOKATMEEE -e ROOT=TRUE rocker/tidyverse:3.4

如果我在容器中运行 bash shell,我可以看到文件夹:

docker exec -it 38b2d6ca427f bash

> ls
bin   dev  home  lib    LOOKATMEEE  mnt  proc  run   srv  tmp  var  boot  etc  init  lib64  media       opt  root  sbin  sys  usr
#                       ^ there is is!

但是,如果我在localhost:8787 连接到 RStudio 服务器,我不会在文件窗格中看到它,也不会在 R 控制台中运行 list.files() 时显示它:

我确定我缺少一些基本的东西,但如果有人能告诉我那是什么...谢谢!

【问题讨论】:

我认为您只需将工作目录设置为您将文件夹复制到的位置,从外观上看就是setwd('..') 啊哈,谢谢!是的,它实际上是作为子目录安装的两个级别 - 所以setwd('../..') 或 list.files(../..) 会打开它。我正在寻找的是让它显示在默认的工作目录中,但现在很清楚如何做到这一点 您可以将驱动器安装在用户rstudio(运行RStudio的用户)的主目录中:docker run -d -p 8787:8787 -v $HOME/my_folder:/home/rstudio/LOOKATMEEE -e ROOT=TRUE rocker/tidyverse:3.4应该可以工作 @alistaire 如果您想将其发布为答案,我会投赞成票。谢谢 @lorenzo -- 是的,我推断的差不多了,谢谢!
【参考方案1】:

在这种情况下,R 和 RStudio 的默认工作目录为 /home/rstudio,比我告诉 docker 挂载文件夹的 / 低两级。

问题中docker run命令后,可以去list.files('/')查看文件夹。

如果您希望您的文件夹像我一样显示在 R 的默认工作目录中,然后像这样修改 docker run

docker run -d -p 8787:8787 -v $HOME/my_folder:/home/rstudio/LOOKATMEEE -e ROOT=TRUE rocker/tidyverse:3.4

它应该在那里:

感谢用户alistaire

【讨论】:

你能写到那个挂载的文件夹 LOOKATMEEE 还是直接读取?【参考方案2】:

这个答案是给后代的:)

这个概念是来自主机的资源与容器的“匹配”: :

命令结构应该是这样的:

docker run -d -e PASSWORD= -p 8787:8787 -v : /home/rstudio/ 摇杆/rstudio

查看说明here

【讨论】:

以上是关于在 docker (tidyverse) 中挂载 R/RStudio 可访问的本地卷的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose:为绑定挂载和托管挂载定义挂载

docker中容器有必要挂载到主机上吗存储

docker数据卷挂载使用

docker:无法在挂载目录中使用 ls

Docker 容器数据卷(挂载)

如何在 openFOAM 的 docker 版本中挂载卷