Docker:卷安装目录出现“权限被拒绝”错误

ten*_*ten 2 windows docker docker-compose docker-volume

我写了一个docker-compose.yml这样的:

version: "3"
services:
  notebook:    
    image: jupyter/datascience-notebook
    
    ports:
      - "8888:8888"
    volumes: 
      - jupyterlabPermanent:/hahaha
    environment:
      JUPYTER_ENABLE_LAB: "yes"
      TZ: "Asia/Tokyo"
    command:
      start-notebook.sh --NotebookApp.token=''
volumes:
  jupyterlabPermanent:
Run Code Online (Sandbox Code Playgroud)

让我先说清楚舞台上出现的人物有哪些。

  • \hahaha:位于根目录的容器端目录
  • jupyterlabPermanenthahaha:容器端目录挂载的卷。
  • dockerjulia_jupyterlabPermanent\_data:为卷提供安全保护的主机端目录,该目录同步位于. 的完整路径isjupyterlabPermanent中的数据。\hahahadockerjulia_jupyterlabPermanent\_data\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\dockerjulia_jupyterlabPermanent\_data

当我在目录中的 bash 上使用 touch 命令时\hahaha,我得到permission denied

# bash command line at \hahaha

(base) jovyan@4bcdaa228d9e:/hahaha$ touch test.txt
touch: cannot touch 'test.txt': Permission denied
Run Code Online (Sandbox Code Playgroud)

因此,容器中完成的每个任务都无法存储在\hahaha卷 中jupyterlabPermanent,这意味着数据保存在此环境中不起作用。

我该如何解决这个问题?我搜索了一下这个,发现我需要更改权限的配置,但我不明白。

我在 Windows 10 家庭版上使用 Docker Desktop for Windows 和 WSL 2。

Han*_*ian 5

您需要卷上的 root 访问权限才能更改权限。让我们运行一个普通的 Ubuntu 容器并挂载该卷

docker run -it --rm -v jupyterlabPermanent:/hahaha ubuntu
Run Code Online (Sandbox Code Playgroud)

现在我们可以将组所有权更改为 GID 100,这是 jovyan 用户所属的组,并将权限更改为 775,以便组成员可以对其进行写入

chown :100 /hahaha
chmod 775 /hahaha
Run Code Online (Sandbox Code Playgroud)

现在您可以退出 Ubuntu 容器并运行 jupyter 容器,您应该能够写入该卷。