【问题标题】:How to mount docker container home directory to Azure Storage如何将 docker 容器主目录挂载到 Azure 存储
【发布时间】:2020-03-19 21:35:30
【问题描述】:

我是 docker 新手。我正在尝试让 atmoz/sftp 容器与 Azure 存储一起使用。

我的目标是让多个 SFTP 用户将文件上传到他们自己的文件夹,然后我可以在 Azure 存储上找到这些文件夹。

我使用了以下命令:

az container create \
--resource-group test \
--name testsftpcontainer \
--image atmoz/sftp \
--dns-name-label testsftpcontainer \
--ports 22 \
--location "East US" \
--environment-variables SFTP_USERS="ftpuser1:yyyy:::incoming ftpuser2:xxx:::incoming" \
--azure-file-volume-share-name test-sftp-file-share \
--azure-file-volume-account-name storagetest \
--azure-file-volume-account-key "zzzzzz" \
--azure-file-volume-mount-path /home

容器已创建并运行,但是当我尝试通过 Filezilla 连接失败时,我在日志中得到了这个:

Accepted password for ftpuser2 from 10.240.xxx.xxx port 64982 ssh2 
bad ownership or modes for chroot directory component "/home/"

如果我使用 /home/ftpuser1/incoming 它适用于其中一个用户。

我需要先更改 /home 目录的权限吗?如果有,怎么做?

【问题讨论】:

    标签: azure docker permissions azure-storage azure-container-service


    【解决方案1】:

    当然,您可以将 Azure 文件共享挂载到容器目录 /home。它对我来说非常有效:

    我还用图像atmoz/sftp 进行了测试。它也可以正常工作。这里的命令:

    az container create -g myResourceGroup \
    -n azuresftp \
    --image atmoz/sftp \
    --ports 22 \
    --ip-address Public \
    -l eastus \
    --environment-variables SFTP_USERS="ftpuser1:yyyy:::incoming ftpuser2:xxx:::incoming" \
    --azure-file-volume-share-name fileshare \
    --azure-file-volume-mount-path /home \
    --azure-file-volume-account-name xxxxxx \
    --azure-file-volume-account-key xxxxxx
    

    截图如下:

    更新:

    根据要求,当您现在将 Azure 文件共享挂载到路径 /home/home/user 时,错误显示所有权错误并且无法控制权限。因此,我建议您将 Azure 文件共享挂载到每个用户的路径 /home/user/upload,它会得到您需要的相同结果。

    【讨论】:

    • 感谢您对此进行测试。不过,我的问题有点不清楚。容器被创建并启动。当我通过 Filezilla 连接到 SFTP 时发生错误。
    • @VilémProcházka 对于您的问题,现在无法将 Azure 文件共享挂载到路径 /home 或 /home/user 以使 sftp 可用。但是您可以将文件共享挂载到每个用户主路径下的目录,例如路径 /home/user/upload。将文件共享挂载到路径 /home/user 的结果相同。
    • 谢谢,我担心会这样。为简单起见,我使用了答案中的解决方案。对我有用,但其他人可能需要按照您的建议进行操作。
    • @VilémProcházka 我认为我的建议更适合具有多个用户的 SFTP。如果您不介意,请接受我的回答,我会在回答中添加建议。
    • 完成,请相应地修改您的答案,以免混淆。
    【解决方案2】:

    我找不到问题的解决方案。最后我使用了另一种方法: - 我将 Azure 存储安装到另一个不相关的文件夹 /mount/sftpfiles - 构建容器后,我运行了这些命令:

    容易更新 apt-get -y 安装 lsyncd lsyncd -rsync /home /mnt/sftpfiles

    他们下载了一个名为 lsyncd 的工具,该工具会监视文件系统的变化,并在发生变化时将文件复制到另一个文件夹。

    这解决了我的要求,但它具有复制所有文件的副作用(这对我来说不是问题)。

    我仍然愿意接受其他可以帮助我更清洁的建议。

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2014-06-19
      • 1970-01-01
      • 2020-09-20
      • 2019-02-08
      相关资源
      最近更新 更多