【发布时间】:2026-02-08 11:10:01
【问题描述】:
我想给我的学生一个 docker 容器,以便他们能够进行实验。我以为我使用以下 dockerfile:
FROM jupyter/datascience-notebook:latest
ADD ./config.json /home/jovyan/.jupyter/jupyter_notebook_config.json
ADD ./books /home/jovyan/work
因此,标准容器将包含一些我创建并存储在 books 文件夹中的笔记本。然后我在本地构建并运行这个容器
#!/usr/bin/env bash
docker build -t aaa .
docker run --rm -p "8888:8888" -v $(pwd)/books:/home/joyvan/work aaa
我构建容器 aaa 并再次与它共享文件夹书籍(尽管书籍已在编译时复制到图像中)。我现在在端口 8888 上打开容器。我可以编辑 /home/joyvan/work 文件夹中的文件,但这些东西不会被传输回主机。发生了可怕的错误。是不是因为我在 docker build 期间添加了文件,然后在 -v ...中再次共享它们?
我玩过各种选择。我已将本地用户添加到用户组。我确实对书中的所有文件进行了 chown。我的所有文件在容器中都显示为 root:root。然后我是容器中的joyvan,并且没有对这些文件的写访问权。我如何确保文件归joyvan所有?
编辑:
其他一些元素:
tom@thomas-ThinkPad-T450s:~/babynames$ docker exec -it cranky_poincare /bin/bash
jovyan@5607ac2bcaae:~$ id
jovyan uid=1000(jovyan) gid=100(users) groups=100(users)
jovyan@5607ac2bcaae:~$ cd work/
jovyan@5607ac2bcaae:~/work$ ls
test.txt text2.txt
jovyan@5607ac2bcaae:~/work$ ls -ltr
total 4
-rw-rw-r-- 1 root root 5 Dec 12 19:05 test.txt
-rw-rw-r-- 1 root root 0 Dec 12 19:22 text2.txt
在主机上:
tom@thomas-ThinkPad-T450s:~/babynames/books$ ls -ltr
total 4
-rw-rw-r-- 1 tom users 5 Dez 12 20:05 test.txt
-rw-rw-r-- 1 tom users 0 Dez 12 20:22 text2.txt
tom@thomas-ThinkPad-T450s:~/babynames/books$ id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom),27(sudo),100(users),129(docker)
【问题讨论】:
-
手动检查 shell 会话时是否存在相关文件?您在构建时是否有任何回溯/日志?
-
什么用户在你的容器中运行你的服务?他的 UID/GID 是什么?另外,您是否有任何错误消息/回溯,并且在您编辑时更改是否出现在您的容器中?
-
你也可以运行
ls -l books吗? -
我已将您的输出添加到您的帖子中,您可以删除您的评论。但是您能否从主机的角度为
~/work本身和您的挂载点添加输出?