Как поделиться владением смонтированным каталогом на docker? - PullRequest
1 голос
/ 14 февраля 2020

Я все еще новичок в использовании docker, и в настоящее время я планирую провести обучение по машинному обучению на суперкомпьютере, которым пользуются многие пользователи. Я успешно создал образ и смонтировал все необходимые данные, но когда я попытался запустить тренинг, мне было отказано в разрешении, когда код пытается получить доступ к 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

Я надеюсь, что кто-то может помочь мне решить эту проблему

1 Ответ

0 голосов
/ 14 февраля 2020

Проблема находится в каталоге результатов:

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

, но только владелец каталога может писать в:

drwxr-xr-x 9 dgx_user6 dgx_user6 4096 05 14 05:33 результаты

Используемое изображение указывает пользователя, идентификатор которого отличается от идентификатора пользователя владельца каталога на хосте.
Вы можете изменить это поведение, указав пользователь (и, необязательно, группа) при запуске контейнера с флагом -u / --user ( см. справочник по командам запуска ).
Например, запуск контейнера с идентификатором пользователя и группы пользователя хоста :

docker run  --user $(id -u):$(id -g) myImage

Обратите внимание, что ii будет работать только в том случае, если идентификатор пользователя и группы в изображении совпадает с идентификатором пользователя на хосте. По умолчанию 1000: 1000.
Если эти id не совпадают, вам, вероятно, следует найти способ сопоставления идентификатора пользователя или группы для файлов, которыми нужно манипулировать с обеих сторон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...