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

Добавить комментарий