Монтировать SMB / CIFS в контейнере Docker

у меня есть веб-приложение, работающее в контейнере Docker. Это приложение должно получить доступ к некоторым файлам на нашем корпоративном файловом сервере (Windows Server с контроллером домена Active Directory). Файлы я пытаюсь открыть файлы изображений, созданные для наших клиентов и веб-приложение отображает их в составе портфеля клиента.

на моей машине разработки у меня есть соответствующие папки, смонтированные через записи в /etc/fstab и пункты держателя хозяина установлены в Контейнер Docker через

3 ответов


да, Docker предотвращает установку удаленного Тома внутри контейнера в качестве меры безопасности. Если Вы доверяете своим изображениям и людям, которые их запускают, вы можете использовать --privileged флаг с docker run отключить эти меры безопасности.

Далее, вы можете объединить --cap-add и --cap-drop чтобы дать контейнеру только те возможности, которые ему действительно нужны. (см. документацию) на SYS_ADMIN потенциал-это тот, который предоставляет привилегии горы.


  1. Да
  2. есть закрытый вопрос гора.cifs в контейнере

https://github.com/docker/docker/issues/22197

в соответствии с которым добавление

--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH

к вариантам запуска сделает mount-t cifs работоспособным.

я попробовал и:

mount -t cifs //<host>/<path> /<localpath> -o user=<user>,password=<user>

внутри контейнера работает


можно использовать smbclient команда (часть пакета Samba) для доступа к серверу SMB/CIFS из контейнера Docker без его установки, так же, как вы могли бы использовать curl для загрузки или выгрузки файла.

есть вопрос StackExchange Unix это касается этого, но вкратце:

smbclient //server/share -c 'cd /path/to/file; put myfile'

для нескольких файлов есть -T опция, которая может создавать или извлекать .tar архивы, однако это похоже на то, что быть двухэтапным процессом (один для создания .tar а затем еще один, чтобы извлечь его локально). Я не уверен, что вы могли бы использовать трубу, чтобы сделать это за один шаг.