具有 docker-compose 和 RStudio/Jupyter 的持久卷

Persistent volumes with docker-compose and RStudio/Jupyter

我正在尝试创建一个 RStudio 实例 和一个 Jupyter Notebook 实例 使用 docker-compose 构建图像。我可以创建这些实例,但安装的卷似乎不是 "persistent"。

下面是我文件夹的树结构:

.
├── Docker
│   ├── docker-compose.yml
│   └── Dockerfile
└── R_and_Jupyter_scripts
    └── files_already_there.txt

我愿意:

1) files_already_there.txt 在我的 RStudio 和 Jupyter Notebook 实例中可用。

2) 从两个实例之一创建的任何新 file/script 都会出现在具有 read/write 权限的 R_and_Jupyter_scripts 文件夹中。 i.e:我从 RStudio 实例创建了一个文本文件 "output.txt" 但是当我检查路径时,这里是文件保存的位置:

sudo find / -name "output.txt"
/var/lib/docker/overlay2/821d3d087948309e3c489af29a5263e53e5f72627e903b4285a9597214412840/diff/home/maxence/output.txt
/var/lib/docker/overlay2/821d3d087948309e3c489af29a5263e53e5f72627e903b4285a9597214412840/merged/home/maxence/output.txt

下面是我现在的docker-compose.yml,你能看出哪里不对吗?

version: "3.5"
services:
  rstudio:
    environment:
      - USER=maxence
      - PASSWORD=password
    image: "rocker/tidyverse:latest"
    build:
     context: ./
     dockerfile: Dockerfile
    volumes:
      - /home/ec2-user/R_and_Jupyter_scripts:/var/lib/docker/
    container_name: rstudio
    ports:
     - 8787:8787

  jupyter:
    image: 'jupyter/datascience-notebook:latest'
    ports:
     - 8888:8888
    volumes:
      - /home/ec2-user/R_and_Jupyter_scripts:/var/lib/docker/
    container_name: jupyter

非常感谢。

我没有你的 Dockerfile,看起来你是 运行 一个 Amazon 实例,所以我不能肯定地重现这个,但是如果我删除 Dockerfile 部分并进行一些其他编辑我可以制作适用于我的 Ubuntu 18 机器的东西。

version: "3.5"
services:
  rstudio:
    environment:
      - USER=maxence
      - PASSWORD=password
    image: "rocker/tidyverse:latest"
    volumes:
      - /tmp/R_and_Jupyter_scripts:/home/maxence/R_and_Jupyter_scripts
    container_name: rstudio
    ports:
      - 8787:8787

  jupyter:
    image: 'jupyter/datascience-notebook:latest'
    ports:
      - 8888:8888
    volumes:
      - /tmp/R_and_Jupyter_scripts:/home/jovyan/R_and_Jupyter_scripts
    working_dir: /home/jovyan/R_and_Jupyter_scripts
    container_name: jupyter

我使用 /tmp/R_and_Jupyter_scripts 作为容器外的位置。

在 Rstudio 中,创建了 /home/maxence,因为这对应于指定的 USER,这将是您登录时显示的位置。然后我只是在这个目录下创建了一个目录在 volume 指令中作为容器外文件的位置。当您登录到 Rstudio 时,您会看到一个名为 R_and_Jupyter_scripts 的文件夹,您可以在其中输入和创建任何您喜欢的内容(我认为 working_dir 可以,但它似乎总是从家里开始文件夹)

在您使用的 Jupyter 映像中,默认用户是 jovyan,因此将自动创建一个文件夹 /home/jovyan。然后我在 volumeworking_dir 指令中使用它。 Jupyter 容器将在您登录时使用此 working_dir

我测试了它,在所有 3 个地方都可以读写。

使用 /var/lib/docker 将在每个容器内正确创建一个卷,问题是任何一个客户端都无法为其设置位置。