具有 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
。然后我在 volume
和 working_dir
指令中使用它。 Jupyter 容器将在您登录时使用此 working_dir
。
我测试了它,在所有 3 个地方都可以读写。
使用 /var/lib/docker
将在每个容器内正确创建一个卷,问题是任何一个客户端都无法为其设置位置。
我正在尝试创建一个 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
。然后我在 volume
和 working_dir
指令中使用它。 Jupyter 容器将在您登录时使用此 working_dir
。
我测试了它,在所有 3 个地方都可以读写。
使用 /var/lib/docker
将在每个容器内正确创建一个卷,问题是任何一个客户端都无法为其设置位置。