Подключаем ресурс 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