【问题标题】:Mounting from persistent storage into azure multi container app从持久存储安装到 azure 多容器应用程序
【发布时间】:2021-01-10 18:32:01
【问题描述】:

我正在尝试使用 azure 构建一个多容器应用程序。我正在努力访问持久存储。在我的 docker-compose 文件中,我想为我的 rabbitmq 容器添加配置文件。我已将文件共享安装到包含 def.json 的目录“/home/fileshare”。在云上它似乎没有创建卷,因为在启动 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    

【问题讨论】:

  • 我现在也尝试使用${WEBAPP_STORAGE_HOME}/home/fileshare/def.json:/opt/rabbitmq-conf/def.json。我将 /home 添加到路径中,因为我认为 ${WEBAPP_STORAGE_HOME} 可能不指向主目录
  • 这个问题还有更多更新吗?它解决了你的问题吗?你不给任何回应的原因是什么?!如果它对你有用,就很容易接受!

标签: azure docker docker-compose rabbitmq azure-web-app-for-containers


【解决方案1】:

您需要使用 WEBAPP_STORAGE_HOME 环境变量,该环境变量映射到 /home 的持久存储。

${WEBAPP_STORAGE_HOME}/fileshare/def.json:/opt/rabbitmq-conf/def.json

【讨论】:

  • 这只会导致来自 rabbitmq 容器 2020-09-24T13:46:23.875893469Z {"init terminating in do_boot",{error,{error,{could_not_read_defs,{"/opt/rabbitmq-conf/def.json",enoent}}}}} 的以下错误。我也无法通过“azure 门户”连接到主机来检查挂载是否有效,只收到以下错误:SSH CONNECTION CLOSE - Error: getaddrinfo ENOTFOUND Couldnt connect to main site containerError: getaddrinfo ENOTFOUND Couldnt connect to main site container CREDENTIALS
  • 尝试使用像busybox这样的测试容器进行测试,看看映射到持久存储是否有效。
  • 我使用busybox并以类似的方式添加音量,但将目标更改为/home/rabbitmq-conf/def.json作为rabbitmq图像。我将ls /home 作为命令传递,它是空的......所以对我来说,${WEBAPP_STORAGE_HOME} 似乎不像@CSharpRocks 建议的那样指向/home
  • 感谢您的帮助,但在本教程中,他们实际上做了一些不同的事情。他们在 webapp 中创建了一个 docker 卷......我要做的是将文件放入容器中,而不是将容器存储映射到 webapp 中,以便我可以保留容器的数据。
【解决方案2】:

据我了解,您希望将 Azure 文件共享挂载到容器 rabbitmq 并将 def.json 文件上传到文件共享,以便您可以访问容器内的 def.json 文件。

按照步骤here 将文件共享挂载到容器。而且它只支持挂载文件共享,不支持直接挂载文件。

【讨论】:

  • 是的,你得到了我想要做的。正如上面答案中所解释的,我已经尝试了您建议的那些步骤,但是对于多容器应用程序,我无法访问已安装的目录。
  • @Alex 为什么不访问挂载的目录?如果启用 SSH,您也可以访问它。并挂载 Azure 存储,您只需要将文件上传到存储。我不明白你为什么认为这是不可能的。
  • 当使用单个容器应用程序时,我不能只使用 ssh 连接到它正在运行的机器,并且我可以看到已安装的文件,在多容器应用程序上我无法通过 ssh 连接。因此,对于单个容器应用程序,挂载可以正常工作,并且文件是我期望的位置。使用多容器应用程序似乎无法正常工作,因为我无法将文件放入容器中。
【解决方案3】:

这个问题的解决方法似乎是使用ftp访问webapp并保存定义文件。 Docker-Compose 处于预览模式(自 2018 年起),实际上不支持很多选项。我尝试将存储安装到单个容器应用程序并使用 ssh 连接到它,该文件正是人们期望的位置。对于多容器应用程序,这是行不通的。 我觉得 docker-compose 功能还没有完全支持

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2019-05-13
    • 2019-06-25
    • 2022-12-14
    • 2021-04-19
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多