LINUX.ORG.RU

Docker. Создание volume из сетевой папки.

 ,


0

2

Есть openmediavault с папкой /data. Эту папку надо сделать доступной контейнеру docker. Если я правильно понимаю, надо создать volume и туда смонтировать эту папку.

В компоузе пишу

services:
...
  volumes:
   - smbvolume:/data/photos
...
volumes:
  smbvolume:
    driver_opts:
      type: cifs
      device: //192.168.0.65/data
      o: "username=test,password=test,uid=1000,gid=100,vers=3.0"

Получаю ошибку:

Error response from daemon: error while mounting volume ‘/var/lib/docker/volumes/immich_smbvolume/_data’: failed to mount local volume: mount //192.168.0.65/data:/var/lib/docker/volumes/immich_smbvolume/_data, data:

Что я делаю не так?


Ответ на: комментарий от anonymous

В примере по ссылке

 docker volume create \
	--driver local \
	--opt type=cifs \
	--opt device=//uxxxxx.your-server.de/backup \
	--opt o=addr=uxxxxx.your-server.de,username=uxxxxxxx,password=*****,file_mode=0777,dir_mode=0777 \
	--name cif-volume

Поменял у себя на

volumes:
  smbvolume:
    driver: local
    driver_opts:
      type: cifs
      device: //192.168.0.65/data
      o: "addr=192.168.0.65,username=test,password=test,file_mode=0777,dir_mode=0777"

Та же ошибка. Может я какую-то мелочь не замечаю?

Gnork
() автор топика

Очень извиняюсь, образался хвост ошибки.

Error response from daemon: error while mounting volume '/var/lib/docker/volumes/immich_smbvolume/_data': failed to mount local volume: mount //192.168.0.65/data:/var/lib/docker/volumes/immich_smbvolume/_data, data: username=test,password=********,domain=domain: operation not permitted 

Кем не разрешена операция?

Gnork
() автор топика
Ответ на: комментарий от PRN

Это понятно. Вот так я монтирую в консоли:

mount -t cifs -o username=test,password=test //192.168.0.65/shared /mnt/

Шара монтируется, её содержимое видно.В докере запускается это:

volumes:
  smbvolume:
    driver: local
    driver_opts:
      type: cifs
      device: //192.168.0.65/shared
      o: "addr=192.168.0.65,username=test,password=test,file_mode=0777,dir_mode=0777"

Получаю ошибку

Error response from daemon: error while mounting volume '/var/lib/docker/volumes/immich_smbvolume/_data': failed to mount local volume: mount //192.168.0.65/data:/var/lib/docker/volumes/immich_smbvolume/_data, data: username=test,password=********,domain=domain: operation not permitted

Меня тут несколько удивляет //192.168.0.65/data: хотя у меня написано //192.168.0.65/shared

Gnork
() автор топика
Ответ на: комментарий от Gnork

Меня тут несколько удивляет //192.168.0.65/data: хотя у меня написано //192.168.0.65/shared

Для начала проверь свои диски docker volume ls. Вангую там уже создан smbvolume. Если так, то посмотри его параметры docker volume inspect smbvolume. Вангую там "device": "/data",. Тогда просто удали его docker volume rm smbvolume.

Если меняешь параметры smbvolume, то его надо будет удалять каждый раз.

PRN
()
Последнее исправление: PRN (всего исправлений: 1)
Ответ на: комментарий от PRN

Всё именно так и оказалось. Теперь в ошибке жалуется на //192.168.0.65/shared. Но первоначальная проблема осталась. «operation not permitted». Может я что-то в OMV не так настроил?

Вангую

Как всё просто, когда разбираешься в вопросе. Завидую.

Gnork
() автор топика
Ответ на: комментарий от Gnork

Дальнейшие опыты показали следующее. Пробовал два варианта.

mount -t nfs -O "auto,nofail,noatime,nolock,intr,tcp,actimeo=1800" 192.168.0.65:shared /mnt/shared

и

mount -t cifs -O "auto,nofail,noatime,nolock,intr,tcp,actimeo=1800" //192.168.0.65/shared /mnt/shared

В консоли proxmox монтирование сетевой папки получается.
В консоли LXC контейнера с докером выдает mount.nfs: Operation not permitted и mount error(1): Operation not permitted соответственно.
Сидящий в том же докере nextcloud эту папку видит и работать с ней может (средствами самого nextcloud, монтирование я там не делал).
В винде эту папку вижу и работать с ней могу.
В какую сторону копать, чтобы найти причину этого безобразия?

Gnork
() автор топика
Ответ на: комментарий от anonymous

Попробуй отключить SELinux.

Полез смотреть, что это такое

root@pve:~# getenforce
-bash: getenforce: command not found
root@pve:~# sestatus
-bash: sestatus: command not found

У меня его нет и отключать нечего?

Gnork
() автор топика
Ответ на: комментарий от Gnork

В консоли LXC контейнера с докером выдает

Так ты в proxmox запускаешь? Сразу бы так и написал. Скорее всего, ты не там проблему ищешь. Контейнер должен иметь права на монтирование nfs/cifs. Для этого он должен быть привилегированным. И в опциях (Вкладка Options) для Features должно быть выставлено mount=nfs;cifs и еще, вроде как, nesting=1.

Доки есть на твоем локальном инстансе: https://<your-proxmox>/pve-docs/chapter-pct.html#pct_options

Если контейнер не привилегирован, то чтобы не пересоздавать, его можно забекапить и восстановить как Privileged.

PRN
()