如何将 docker 容器主目录挂载到 Azure 存储

How to mount docker container home directory to Azure Storage

我是 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 File Share挂载到容器目录/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,它会达到你需要的相同结果。

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

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

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

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

我仍然乐于接受其他有助于我使这个更清洁的建议。