Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用docker compose为Jupyter和RStudio实例装载卷_R_Docker_Docker Compose_Jupyter Notebook_Docker Volume - Fatal编程技术网

使用docker compose为Jupyter和RStudio实例装载卷

使用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

我正在学习Docker,并使用Docker compose创建图像,创建了一个RStudio实例和一个Jupyter笔记本实例。 虽然我可以登录并从实例中创建脚本,但我注意到这些脚本并没有“持久”保存,并且在我的主文件夹
/home/rstudio_scripts
home/jupyter_scripts
中找不到它们

我了解到,为了使在这些实例中创建的脚本/数据即使在docker容器关闭后也能“持久化”,您需要装载卷

因此,我尝试在下面的docker-compose.yml中装载卷并为RStudio&Jupyter创建一个特定文件夹:

但显然有问题,因为文件夹和数据都没有出现

My docker-compose.yml和RStudio的docker文件都位于一个名为docker的文件夹中,我正在该文件夹中构建图像docker
build-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