Подключение из постоянного хранилища в многоконтейнерное приложение Azure

Я пытаюсь создать многоконтейнерное приложение с лазурью. Я борюсь с доступом к постоянному хранилищу. В моем файле для создания докеров я хочу добавить файл конфигурации для моего контейнера rabbitmq. Я смонтировал файлообменник в каталог /home/fileshare, содержащий файл def.json. В облаке, похоже, том не создается, так как при запуске rabbitmq не может найти файл. Если я сделаю это локально и просто сохраню файл где-нибудь, он сработает.

Файл компоновки Docker:

version: '3.8'
services:

   rabbitmq:
      image: rabbitmq:3-management-alpine
      volumes:
       - /home/fileshare/def.json:/opt/rabbitmq-conf/def.json
      expose:
        - 5672
        - 15672
      environment:
        RABBITMQ_DEFAULT_USER: guest
        RABBITMQ_DEFAULT_PASS: guest
        RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS: -rabbitmq_management load_definitions "/opt/rabbitmq-conf/def.json"
      networks:
        - cloudnet 
        
networks:
   cloudnet:
      driver: bridge    

person Alex    schedule 24.09.2020    source источник
comment
Теперь я также попытался использовать ${WEBAPP_STORAGE_HOME}/home/fileshare/def.json:/opt/rabbitmq-conf/def.json. Я добавил /home к пути, так как решил, что ${WEBAPP_STORAGE_HOME} может не указывать на домашний каталог   -  person Alex    schedule 24.09.2020
comment
Есть ли еще обновления для вопроса? Это решает вашу проблему? Почему вы не даете никакого ответа?! Это просто принять, если это работает для вас!   -  person Charles Xu    schedule 01.10.2020


Ответы (3)


Вам нужно использовать переменную env WEBAPP_STORAGE_HOME, которая сопоставлена ​​с постоянным хранилищем в /home.

${WEBAPP_STORAGE_HOME}/fileshare/def.json:/opt/rabbitmq-conf/def.json
person CSharpRocks    schedule 24.09.2020
comment
Это приводит только к следующей ошибке из контейнера rabbitmq 2020-09-24T13:46:23.875893469Z {"init terminating in do_boot",{error,{error,{could_not_read_defs,{"/opt/rabbitmq-conf/def.json",enoent}}}}}. Я также не могу подключиться по ssh к хост-компьютеру через лазурный портал, чтобы проверить, работает ли монтирование, получая только следующую ошибку: SSH CONNECTION CLOSE - Error: getaddrinfo ENOTFOUND Couldnt connect to main site containerError: getaddrinfo ENOTFOUND Couldnt connect to main site container CREDENTIALS - person Alex; 24.09.2020
comment
Попробуйте протестировать с помощью тестового контейнера, такого как busybox, чтобы увидеть, работает ли сопоставление с постоянным хранилищем. - person CSharpRocks; 24.09.2020
comment
Я использовал busybox и добавил том аналогичным образом, но изменил цель на /home/rabbitmq-conf/def.json в качестве изображения rabbitmq. Я передал ls /home как команду, и она пуста... Так что мне кажется, что ${WEBAPP_STORAGE_HOME} не указывает на /home, как предполагает @CSharpRocks - person Alex; 24.09.2020
comment
Спасибо за помощь, но в этом уроке они на самом деле делают что-то другое. Они создают том докера в веб-приложении... я пытаюсь поместить файл в контейнер, а не сопоставлять хранилище контейнера с веб-приложением, чтобы я мог сохранять данные контейнера. - person Alex; 24.09.2020

Насколько я понимаю, вы хотите подключить общую папку Azure к контейнеру rabbitmq и загрузить файл def.json в общую папку, чтобы получить доступ к файлу def.json внутри контейнера.

Следуйте инструкциям здесь, чтобы подключить общую папку к контейнеру. И он просто поддерживает монтирование общей папки, а не файла напрямую.

person Charles Xu    schedule 25.09.2020
comment
Да, вы понимаете, что я пытаюсь сделать. Как объяснено в ответе выше, я уже пробовал те шаги, которые вы предлагаете, но с многоконтейнерным приложением я не могу получить доступ к смонтированному каталогу. - person Alex; 02.10.2020
comment
@Alex Почему бы не получить доступ к смонтированному каталогу? Если вы включите SSH, вы также сможете получить к нему доступ. И смонтируйте хранилище Azure, вам просто нужно загрузить файлы в хранилище. Не понимаю, почему вы считаете, что это невозможно. - person Charles Xu; 02.10.2020
comment
При использовании приложения с одним контейнером я не могу просто использовать ssh для подключения к машине, на которой оно работает, и я могу видеть смонтированные файлы, в приложении с несколькими контейнерами я не могу подключиться через ssh. Таким образом, для приложения с одним контейнером монтирование работает, и файл находится там, где я ожидаю. С многоконтейнерным приложением это не работает, так как я не могу поместить файл в контейнер. - person Alex; 03.10.2020

Решение этой проблемы, по-видимому, заключается в использовании ftp для доступа к веб-приложению и сохранении файла определений. Docker-Compose находится в режиме предварительного просмотра (с 2018 года), и многие параметры на самом деле не поддерживаются. Я попытался подключить хранилище к одному приложению-контейнеру и использовал ssh для подключения к нему, и файл оказался именно там, где и следовало ожидать. С многоконтейнерным приложением это не работает. Я чувствую, что функция создания докеров еще не полностью поддерживается

person Alex    schedule 02.10.2020