在Docker容器中定制RStudio环境

10

我在Windows 10 Pro中的Docker容器中使用RStudio。我使用从https://hub.docker.com/u/rocker/中拉取的RStudio rocker/rstudio映像。

为了启动容器,我执行了以下命令:

docker run -d -p 8787:8787 -v //c/Users/<My name>/Documents/R/Rprojects:/home/rstudio/ rocker/rstudio

然后我可以通过以下链接从浏览器访问服务器: http://localhost:8787/。一切正常。

我想要做的是对RStudio环境进行一些定制。特别是,我将“工具/全局选项/编辑器主题”更改为“Pastel on Dark”。我应用了这个选项,但它只在容器存活时保留。当我重新启动容器时,自定义选项全部丢失。

我的项目保存在运行容器时指定的文件夹中,但全局选项没有保存。

那么,我该如何在硬盘上保存全局选项呢?也许我需要在驱动器上公开另一个文件夹,该文件夹将连接到RStudio保存全局选项的容器文件夹?

是否可以在dockerfile中预定义全局选项作为docker镜像中的新层?


我找到了解决方案。RStudio在我挂载的同一驱动器中创建了特殊文件夹。因此,如果您使用相同的文件夹重新启动容器,则所有自定义设置都将被保留。 - Alexander Borochkin
2个回答

7

如果你和我一样使用临时容器(使用--rm标志),那么停止时容器将被删除。这是一件好事,因为它确保每次都有100%的清洁环境,但它意味着设置不会从会话到会话保留。

与许多流行的IDE不同,rstudio设置不存储在用户可访问的透明json中,尽管他们正在处理此问题

一个解决方法是将设置复制到正确的位置:

  • 键绑定:/home/rstudio/.R/rstudio/keybindings/rstudio_bindings.json
  • 常规设置(例如主题):/home/rstudio/.rstudio/monitored/user-settings

设置步骤如下:

  1. 在容器中启动rstudio
  2. 设置您所需的设置
  3. 将上述2个文件备份到您的主机某处。
  4. 每次启动rstudio时复制配置文件-请参见下面的脚本。
我已创建了一个快速启动的快捷方式,指向以下脚本,该脚本很容易适应。它会启动一个名为rstudio的容器,并复制我备份的设置(在我的情况下是从/home/asac/projects/rstudio-config)。
#!/bin/bash                                     
                         
echo Running rstudio on localhost:8787                 
docker run -d --rm -p 8787:8787 -e PASSWORD=<pwd> \                       
-v /home/asac/projects:/home/rstudio/projects \                          
-v /home/asac/data:/home/rstudio/data \                                  
--name rstudio asachet/shiny-dev                                         
                                                                         
echo Copying over rstudio settings                                       
docker exec rstudio mkdir /home/rstudio/.R/rstudio/keybindings -p        
docker cp /home/asac/projects/rstudio-config/user-settings rstudio:/home/rstudio/.rstudio/monitored/user-settings
docker cp /home/asac/projects/rstudio-config/rstudio_bindings.json rstudio:/home/rstudio/.R/rstudio/keybindings/rstudio_bindings.json
                                                                         
echo Launching browser                                                   
xdg-open http://localhost:8787      

2020年的新功能

在RStudio v1.3中,有一个新文件~/.config/rstudio/rstudio-prefs.json,它控制所有设置。您可以在机器之间复制它或手动编辑它。

更多详细信息请参见 RStudio Server PR,该功能已在版本1.3中移植到RStudio。


1
作为复制的替代方案,您还可以将一个卷映射到.config文件夹,或将本地文件夹作为绑定挂载。这很容易与配置了此选项的docker-compose.yml结合使用。有关更多详细信息,请参见此处:https://docs.docker.com/storage/volumes/#start-a-container-with-a-volume 我建议您考虑对.config文件夹和/或/etc/rstudio文件夹进行映射,以获取更多设置。 - zerweck
我尝试使用-v /home/.config:/home/.config命令,其中/home/.config包含主机上我的个人rstudio/rstudio-prefs.json文件。但是,不知何故,我无法将其挂载到容器中的/home/.config目录中。我可以将其挂载到/home/rstudio的任何位置,但不能在其上方。有什么建议吗? - mfakaehler
我解决了这个问题。没有意识到我需要在容器中绑定到 home/rstudio/.config。 - mfakaehler

1

为了澄清Alexander在他自己的帖子中的评论:

  1. 运行你的容器:docker run -p 8787:8787 -v /home/cummingssg/code:/home/rstudio/code rocker/verse
  2. 进入localhost并像平常一样更改RStudio的外观
  3. 退出容器:使用control-C或docker stop
  4. 查找先前容器的名称:docker ps -a
  5. 重新启动容器,它将具有相同的外观:docker start container_name*

(*以step 4最近的项为准,其图像为rocker/verse)

谢谢,Alexander


问题在于一旦你退出,这个配置就会丢失。 - Kots

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接