本文记录在服务器上安装基于 docker 的 rstudio 的配置过程

下载镜像

查看已有镜像

1
docker images

下载 RStudio Server 镜像

1
docker pull docker.1ms.run/rocker/rstudio:latest

启动容器

在50004端口启动rstudio容器

1
2
3
4
5
6
7
8
9
10
11
docker run -d \
--name rstudio_server \
-p 50004:8787 \
-e PASSWORD=<密码> \
-e ROOT=true \
-e USERID=$(id -u) \
-e GROUPID=$(id -g) \
-e TZ=Asia/Shanghai \
-v /mnt/nfs_share/tlj/Project:/home/rstudio/Project \
--restart=always \
docker.1ms.run/rocker/rstudio

参数详解

  • docker run:创建并启动一个新的容器实例。
  • -d:后台运行容器
  • --name rstudio_server:给容器起个固定的名字 rstudio_server,方便后续管理(如停止、重启)。
  • -p 50004:8787:将服务器的 50004 端口映射到容器内部的 8787 端口(RStudio 默认端口)。
  • -e PASSWORD==<密码>:设置 RStudio 网页登录界面的密码。
  • -e ROOT=true:赋予默认用户管理员权限(sudo),允许在终端安装 Linux 系统软件。
  • -e USERID=$(id -u):将容器内用户 ID 同步为宿主机当前用户 ID,解决 NFS 文件读写权限问题。
  • -e GROUPID=$(id -g):将容器内用户组 ID 同步为宿主机当前用户组 ID。
  • -e TZ=Asia/Shanghai:将容器内的系统时间设置为北京时间(Asia/Shanghai)。
  • -v /mnt/nfs_share/tlj/Project:/home/rstudio/Project:数据持久化。将宿主机的 NFS 项目目录挂载到容器内的 /home/rstudio/Project中。这样即使删除了容器,代码和数据也会保存在服务器上,不会丢失。
  • --restart=always:设置容器在崩溃、Docker 重启或服务器重启后自动重新启动。
  • docker.1ms.run/rocker/rstudio:指定用于创建该容器的 RStudio 镜像名称。

查看容器启动日志

1
docker logs rstudio_server

启动成功后,在浏览器输入 http://192.168.205.185:50004/ 即可出现登陆界面
用户名:rstudio
密码为自己所设置的密码

如果要添加新的启动参数并重启,需要先删除旧容器:

1
docker rm -f rstudio_server

其他常用命令

查看正在运行中容器

1
docker ps

重启/停止/启动容器

1
2
3
docker restart rstudio_server
docker stop rstudio_server
docker start rstudio_server

把当前容器打包成新镜像

1
docker commit rstudio_server tlj-rstudio

查看打包后的镜像

1
docker images

安装常用包

安装 Linux 库

1
2
sudo apt-get update
sudo apt-get install -y zlib1g-dev libbz2-dev liblzma-dev libcurl4-openssl-dev libglpk-dev

安装常用R包

1
2
install.packages(c("tidyverse","BiocManager","devtools","ggpubr","Seurat"))
BiocManager::install(c("Signac"))

测试

1
2
library(Seurat)
library(Signac)

常见问题

RStudio Initialization Error

1
2
RStudio Initialization Error
jsonrpc error 1 (Unable to connect to service)

解决方法:不能直接把宿主机的目录挂在到容器内的 /home/rstudio

修改容器内的文件 Permission denied

解决方法:启动时添加以下参数,确保容器中的 uid/gid 与宿主机上的 uid/gid 一致,这样就有了写权限

1
2
-e USERID=$(id -u) \
-e GROUPID=$(id -g) \

设置-e USER=tlj 不起作用

原因:容器的初始化脚本逻辑优先处理了 USERID 的修改(为了匹配宿主机权限),导致它强制重建了默认的 rstudio 用户,从而忽略了自定义的用户名参数。

解决方法:就用rstudio用户名就行,用户名不影响任何东西

R包提示缺少库文件

1
2
unable to load shared object '/usr/local/lib/R/site-library/igraph/libs/igraph.so':
libglpk.so.40: cannot open shared object file: No such file or directory

解决方法:在 Rstudio 的 Terminal 正常使用 apt 安装相关库即可

1
2
sudo apt-get update
sudo apt-get install -y libglpk-dev

参考

rstudio+docker项目官方指南:https://rocker-project.org/images/versioned/rstudio.html
docker镜像站:https://1ms.run/