gpt4 book ai didi

docker - 如何在 docker 上共享挂载目录的所有权?

转载 作者:行者123 更新时间:2023-12-02 19:51:41 25 4
gpt4 key购买 nike

我在使用 docker 方面还是新手,目前我正计划在许多用户共享的 super 计算机上进行机器学习培训。我已经成功创建了一个图像并装载了所有必要的数据,但是当我尝试运行训练时,当代码尝试访问 .txt 文件时,我的权限被拒绝。这是错误

user@701c214f9fa9:/app/sfsnet$ python main_mix_training.py
Traceback (most recent call last):
File "main_mix_training.py", line 156, in <module>
main()
File "main_mix_training.py", line 132, in main
with open(args.log_dir+'/details.txt', 'w') as f:
PermissionError: [Errno 13] Permission denied: './results//details.txt'
user@701c214f9fa9:/app/sfsnet$ python main_mix_training.py
Traceback (most recent call last):
File "main_mix_training.py", line 156, in <module>
main()
File "main_mix_training.py", line 132, in main
with open(args.log_dir+'/details.txt', 'w') as f:
PermissionError: [Errno 13] Permission denied: './results//details.txt'

我已经检查了挂载的目录所有权,它应该都是我的 (dgx_user6) :
total 308
-rw-r--r-- 1 dgx_user6 dgx_user6 1271 二 14 05:32 checkmodel.py
-rw-r--r-- 1 dgx_user6 dgx_user6 458 二 13 23:51 cropping.py
-rw-r--r-- 1 dgx_user6 dgx_user6 12890 二 14 14:03 data_loading.py
drwxr-xr-x 5 dgx_user6 dgx_user6 4096 二 14 04:26 dataset
-rw-r--r-- 1 dgx_user6 dgx_user6 641 二 13 23:51 generate_dataset_csv.py
-rw-r--r-- 1 dgx_user6 dgx_user6 2687 二 13 23:51 interpolate.py
-rw-r--r-- 1 dgx_user6 dgx_user6 95 二 14 05:32 interpolate.sh
-rw-r--r-- 1 dgx_user6 dgx_user6 0 二 14 05:32 log_file
-rw-r--r-- 1 dgx_user6 dgx_user6 6555 二 13 23:51 main_gen_pseudo-data.py
-rw-r--r-- 1 dgx_user6 dgx_user6 7548 二 13 23:51 main_gen_synthetic_and_full.py
-rw-r--r-- 1 dgx_user6 dgx_user6 7030 二 14 14:12 main_mix_training.py
-rw-r--r-- 1 dgx_user6 dgx_user6 69169 二 14 05:34 'model backup.py'
-rw-r--r-- 1 dgx_user6 dgx_user6 2914 二 14 05:32 model_loading_synchronization.ipynb
-rw-r--r-- 1 dgx_user6 dgx_user6 69339 二 14 05:34 models.py
drwxr-xr-x 2 dgx_user6 dgx_user6 4096 二 13 23:51 pretrained
drwxr-xr-x 2 dgx_user6 dgx_user6 4096 二 14 05:33 __pycache__
-rw-r--r-- 1 dgx_user6 dgx_user6 3490 二 13 23:51 README.md
drwxr-xr-x 9 dgx_user6 dgx_user6 4096 二 14 05:33 results
-rw-r--r-- 1 dgx_user6 dgx_user6 5090 二 14 05:34 shading.py
-rw-r--r-- 1 dgx_user6 dgx_user6 605 二 14 05:34 super_resolution.py
-rw-r--r-- 1 dgx_user6 dgx_user6 39867 二 14 05:32 'train backup.py'
-rw-r--r-- 1 dgx_user6 dgx_user6 32377 二 13 23:51 train.py
-rw-r--r-- 1 dgx_user6 dgx_user6 1685 二 13 23:51 utils.py

我使用此命令创建了容器
nvidia-docker run -e NVIDIA_VISIBLE_DEVICES=3 -t -i --name coba --mount type=bind,src=/home/dgx_user6/SfSNet/,dst=/app/sfsnet sfs_face

关于创建用户的容器的一部分
# Create a non-root user and switch to it
RUN adduser --disabled-password --gecos '' --shell /bin/bash user \
&& chown -R user:user /app
RUN echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-user
USER user

# All users can use /home/user as their home directory
ENV HOME=/home/user
RUN chmod 777 /home/user

我希望有人能帮我解决这个问题

最佳答案

问题位于结果目录中:

PermissionError: [Errno 13] Permission denied: './results//details.txt'

但只有目录的所有者可以写入:

drwxr-xr-x 9 dgx_user6 dgx_user6 4096 二 14 05:33 results



您使用的图像指定了一个用户,其 id 与主机上目录所有者的用户 id 不同。
当您使用 -u / --user 启动容器时,您可以通过指定用户(以及可选的组)来覆盖该行为。标志( see run command reference)。
例如,使用主机用户的用户和组 ID 启动容器:
docker run  --user $(id -u):$(id -g) myImage

请注意,只有当图像中的用户和组 id 与主机上的用户相同时,ii 才会起作用。默认值为 1000:1000。
如果这些 id s 不匹配,您可能应该找到一种方法使用户或组 id 匹配您需要在双方操作的文件。

关于docker - 如何在 docker 上共享挂载目录的所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60221293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com