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