Я разрабатываю образ докера, для которого требуется доступ к общим данным в общей папке Azure. Я хочу протестировать это локально перед развертыванием в Azure, и я не использую рои.
Я использую Подключаемый модуль Azure CloudStor Docker
Я успешно установил плагин Cloudstor локально:
docker plugin install --alias cloudstor:azure --grant-all-permissions docker4x/cloudstor:17.06.1-ce-azure1 CLOUD_PLATFORM=AZURE AZURE_STORAGE_ACCOUNT_KEY="..." AZURE_STORAGE_ACCOUNT="..."
И успешно скомпилировал мой контейнер с помощью файла Docker:
FROM nvidia/cuda:10.1-base-ubuntu18.04
# Update + Prerequisites
RUN apt-get update \
&& apt-get -y install build-essential checkinstall \
&& apt-get -y install sudo \
&& apt-get -y install curl \
&& apt-get -y install zip \
&& apt-get -y install unzip \
&& apt-get -y install cifs-utils \
&& apt-get -y install nfs-common nfs-kernel-server
# Install Azure CLI
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
# SMB ports
EXPOSE 137/udp 138/udp 139 445
RUN mkdir /mnt/myshare
Если я запустил контейнер без --mount, все будет работать нормально.
Если я все же попробую это:
docker run -it myImage --mount type=volume,volume-driver=cloudstor:azure,source="myAzureShare",destination="/mnt/myShare" /bin/bash
Я получаю такую ошибку:
docker.exe: ответ об ошибке от демона: сбой при создании среды выполнения OCI: container_linux.go: 345: запуск процесса контейнера вызвал "exec: \" - mount \ ": исполняемый файл не найден в $ PATH": неизвестно.
Нужно ли мне устанавливать в образ какие-либо зависимости CloudStor? Есть ли какие-то дополнительные параметры, которые мне нужно добавить при запуске контейнера?
Редактировать: этот исправлена указанная выше ошибка. Но теперь Docker не может найти изображение, когда я использую флаг --mount:
docker.exe: ответ от демона об ошибке: доступ по запросу для myImage запрещен, репозиторий не существует или может потребоваться «вход в докер»: отказано: запрошенный доступ к ресурсу запрещен.
Если я не использую --mount, изображение загружается нормально
Подключение файлового ресурса Azure с помощью Cloudstor в локальном контейнере Docker
Вы можете попробовать «Драйвер тома Docker для хранилища файлов Azure», он использует протоколы SMB, а также протоколы CIFS для общего доступа к файлам. Здесь вы можете найти исходный код - https://github.com/Azure/azurefile-dockervolumedriver
Плагин CloudStor Docker хорошо подходит для AWS.
Даже используя шаблон YAML, вы можете смонтировать том в группе контейнеров, к которой имеют доступ все контейнеры в группе.
https://docs.microsoft.com/en-us/azure/container-instances/container-instances-volume-azure-files
Похоже, сейчас вы не можете этого сделать: https://github.com/moby/moby/issues/38842 https://github.com/moby/moby/issues/39460
Одна проблема не решена, а другая связана с тем, что ClodStor использует SMB 2.1, но SMB 3.0 требуется для локальной установки.