Подключаем ресурс SMB к контейнеру Docker двумя способами: с помощью плагина Netshare и посредством локального драйвера
Замечание: используемая версия Docker - 19.03.11, Docker Compose - 1.26.0, Netshare - 0.36
Базовая настройка
устанавливаем Docker Engine — Community и Docker Compose, как рассказывается в этой статье
создаем папку для хранения параметров развертывания контейнеров
mkdir /etc/docker/test
создаем файл с параметрами развертывания контейнеров /etc/docker/test/docker-compose.yml
version: '3.8'
networks:
net:
ipam:
config:
- subnet: 192.168.101.0/24
services:
app:
container_name: test
image: alpine
networks:
net:
stdin_open: true
tty: true
entrypoint: /bin/sh
Плагин Netshare
скачиваем исполняемый файл плагина
curl -L https://github.com/ContainX/docker-volume-netshare/releases/download/v0.36/docker-volume-netshare_0.36_linux_amd64-bin -o /usr/local/sbin/docker-volume-netshare
настраиваем права доступа к нему
chmod 700 /usr/local/sbin/docker-volume-netshare
создаем unit-файл /usr/lib/systemd/system/docker-volume-netshare.service
[Unit]
Description=Docker Netshare Plugin
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/docker-volume-netshare cifs
[Install]
WantedBy=multi-user.target
обновляем конфигурацию systemd
systemctl daemon-reload
запускаем службу
systemctl start docker-volume-netshare
заменяем содержимое файла /etc/docker/test/docker-compose.yml
version: '3.8'
networks:
net:
ipam:
config:
- subnet: 192.168.101.0/24
volumes:
vol:
name: server.domain.example/share/
driver: cifs
driver_opts:
cifsopts: username=usr,password=pwd
services:
app:
container_name: test
image: alpine
networks:
net:
volumes:
- vol:/mount
stdin_open: true
tty: true
entrypoint: /bin/sh
подключаемся к контейнеру и проверяем, что монтирование сетевого ресурса было успешно выполнено
docker exec -t -i test /bin/sh
ls -l /mount
Локальный драйвер
заменяем содержимое файла /etc/docker/test/docker-compose.yml
version: '3.8'
networks:
net:
ipam:
config:
- subnet: 192.168.101.0/24
volumes:
vol:
driver: local
driver_opts:
type: cifs
device: //10.1.1.1/share
o: username=usr,password=pwd
services:
app:
container_name: test
image: alpine
networks:
net:
volumes:
- vol:/mount
stdin_open: true
tty: true
entrypoint: /bin/sh
Замечание: при использовании локального драйвера необходимо указывать IP-адрес сервера вместо DNS-имени, в противном случае создание контейнера завершится ошибкой
подключаемся к контейнеру и проверяем, что монтирование сетевого ресурса было успешно выполнено
docker exec -t -i test /bin/sh
ls -l /mount