使用docker compose为Jupyter和RStudio实例装载卷
我正在学习Docker,并使用Docker compose创建图像,创建了一个RStudio实例和一个Jupyter笔记本实例。 虽然我可以登录并从实例中创建脚本,但我注意到这些脚本并没有“持久”保存,并且在我的主文件夹使用docker compose为Jupyter和RStudio实例装载卷,r,docker,docker-compose,jupyter-notebook,docker-volume,R,Docker,Docker Compose,Jupyter Notebook,Docker Volume,我正在学习Docker,并使用Docker compose创建图像,创建了一个RStudio实例和一个Jupyter笔记本实例。 虽然我可以登录并从实例中创建脚本,但我注意到这些脚本并没有“持久”保存,并且在我的主文件夹/home/rstudio_scripts和home/jupyter_scripts中找不到它们 我了解到,为了使在这些实例中创建的脚本/数据即使在docker容器关闭后也能“持久化”,您需要装载卷 因此,我尝试在下面的docker-compose.yml中装载卷并为RStudi
/home/rstudio_scripts
和home/jupyter_scripts
中找不到它们
我了解到,为了使在这些实例中创建的脚本/数据即使在docker容器关闭后也能“持久化”,您需要装载卷
因此,我尝试在下面的docker-compose.yml中装载卷并为RStudio&Jupyter创建一个特定文件夹:
但显然有问题,因为文件夹和数据都没有出现
My docker-compose.yml和RStudio的docker文件都位于一个名为docker的文件夹中,我正在该文件夹中构建图像dockerbuild-t general\u docker.
我还希望在Rstudio或Jupyter实例中创建的任何数据都可以被这两个实例读/写,但我不知道在容器运行之后是否应该使用类似于chmod 777…
的东西
非常感谢任何帮助
编辑1:让我附加更新的docker-compose.yml。以下内容允许我在主目录中创建一个名为R_和_Jupyter_scripts的新文件夹,其中包含我的所有脚本,可以在我的Rstudio实例以及我的Jupyter笔记本中访问。但我希望从Jupyter或RStudio实例创建的任何新脚本在执行“docker compose down”后不会消失。docker-compose.yml的哪一部分应该更改
version: "3.5"
services:
rstudio:
environment:
- USER=username
- PASSWORD=password
image: "rocker/tidyverse:latest"
build:
context: ./
dockerfile: Dockerfile
volumes:
- $HOME/R_and_Jupyter_scripts:/home/rstudio/r_scripts
container_name: rstudio
ports:
- 8787:8787
jupyter:
image: 'jupyter/datascience-notebook:latest'
ports:
- 8888:8888
volumes:
- $HOME/R_and_Jupyter_scripts:/home/jovyan/work
container_name: jupyter
编辑2:
我已经编辑了上面的代码,只在卷中写入绝对路径(见下文),但仍然没有完成我需要的操作
我已经从RStudio创建了一个文本文件output.txt
,当我找到sudo/-name“output.txt”
时,我希望这个文件位于/home/ec2 user/R_和_Jupyter_脚本中
但它最终位于两个不同的位置,看起来像仍在容器中的文件夹:
/var/lib/docker/overlay2/66513c53c04786298cac012ea032be58d434131ce04e73f75bf63ca1d0e358d6/diff/home/maxence/r_scripts/output.txt
及
docker-compose.yml:
version: "3.5"
services:
rstudio:
environment:
- USER=username
- PASSWORD=password
image: "rocker/tidyverse:latest"
build:
context: ./
dockerfile: Dockerfile
volumes:
- /home/ec2-user/R_and_Jupyter_scripts:/home/rstudio/r_scripts
container_name: rstudio
ports:
- 8787:8787
jupyter:
image: 'jupyter/datascience-notebook:latest'
ports:
- 8888:8888
volumes:
- /home/ec2-user/R_and_Jupyter_scripts:/home/jovyan/work
container_name: jupyter
卷
定义在容器内创建文件夹。如果要在Docker主机上装载文件夹,必须提供该主机文件夹的完整路径;仅使用相对本地文件夹名称是不够的
您发布的配置使用的是“命名卷”,而不是装载主机卷。它的作用距离磁盘映像足够近;运行Docker volume ls
时,Docker将有一个对{PROJECT}\u Docker
卷的引用。这会将文件夹的内容保存到其他位置,除非通过装入其他Docker容器,否则通常无法访问
如果要承载卷装载,请删除撰写文件末尾的volumes:
部分,并在每个服务定义中添加类似的内容
volumes:
- /home/ML_Enthousiast/my_project/Docker:/home/rstudio_scripts
不要发布代码的图像。粘贴代码本身,编辑图像中编辑的任何密码等。谢谢@wmorrell,我删除了“命名卷”,并更新了上面的脚本。虽然我应该在我的第一篇文章中更清楚地提到,但我需要的是,即使在docker撰写时,创建的任何新数据或脚本都将保持“持久性”。通过
卷装入目录的数据将持久性保存到该卷。我建议您查看有关卷的Docker文档,它应该有助于理解正在发生的事情。我认为您更新的配置不起作用,volumes
键下的值必须是冒号分隔的字符串,第一部分是命名卷或主机上的绝对路径,第二部分是容器内卷可用的路径,第三部分是可选的装载选项(例如只读)。我认为$HOME
无效,请使用真实路径。Thx@wmorrell,我用绝对路径和更多信息更新了脚本。我已经阅读了docker volumes教程,但找不到明确的教程。从您的更新来看,这些容器似乎从未重新创建过,而您仍然使用从原始配置启动的容器以及命名卷。这已经到了一个地步,在评论中来回走动不再有用了。试着找一个你可以坐在一起解决问题的人,或者报名参加Docker的课程。
volumes:
- /home/ML_Enthousiast/my_project/Docker:/home/rstudio_scripts