Мой вариант использования - это ферма транскодирования, которая считывает входные данные из общего ресурса Samba и записывает его в другой.
Использование mount.cifs
в Docker требует как SYS_ADMIN
, так и DAC_READ_SEARCH
. Я могу использовать два хоста, запустить smbd
на одном хосте и смонтировать его общий ресурс на другом хосте. (И smbd
, и mount
запускаются внутри контейнеров, только на разных хостах.)
Однако я не могу, используя одну и ту же команду mount
, смонтировать общий ресурс Samba на хосте с контейнером, который работает smbd
.
EDIT: он работает на Docker Desktop, но не работает на хосте Linux. (С той же docker версией сервера движка)
TL; DR следующие Docker Компоновка завершается неудачей, ЕСЛИ Я не предоставляю ей привилегированный доступ.
Среды: Работа на Docker для Ма c, не работает на голом металле Linux (Ubuntu 18.04.4 4.15.0-91-generi c Docker 19.03.8 containerd 1.2.13), не работает на виртуализации Hyper-V Linux (Ubuntu 19.04 5.0.0-38-generi c Docker 19.03.6 containerd 1.2.13)
version: '3.4'
services:
samba:
image: dperson/samba
environment:
TZ: 'EST5EDT'
networks:
- default
ports:
- "137/udp"
- "138/udp"
- "139/tcp"
- "445/tcp"
tmpfs:
- /tmp
restart: unless-stopped
stdin_open: true
tty: true
volumes:
- /samba-data
command: '/bin/bash -c "touch /samba-data/file.txt && samba.sh -s \"data;/samba-data\" -u \"bob;bob\" -p"'
mounter:
image: ubuntu
command: '/bin/bash -c "apt update && apt install -y cifs-utils && mkdir /samba-data && mount -v -o username=bob,password=bob,vers=3.0,ro,port=445 //samba/data /samba-data"'
tty: true
# privileged: true
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
networks:
default:
Мои вопросы,
- Почему привилегия требуется, когда работает на том же хосте Docker?
- Можно ли сделать его более ограничительным (предоставив ему только то, что ему нужно)?