我们希望将在多个 Docker 容器中运行的应用程序部署到 Azure 虚拟机。我们希望 Docker 容器能够直接从 Azure 文件 NFS 共享挂载卷。
NFS 共享可以轻松安装到虚拟机本身,但不能安装到容器。我们尝试了适用于 Docker 的 CNI 和 CNM 网络插件(插件安装和设置是按照 Microsoft/Github 文档上的建议完成的),但它们都不适合我们。
我们总是收到“连接超时”或“权限被拒绝”错误。
我们发现的唯一解决方案是使用“--privileged”和“--network=host”选项运行 Docker 容器,但根据我们发现的安全指南,它既不是实用的也不是安全的长期解决方案。
我们还尝试将 blobfuse2 与另一个存储帐户和 blob 容器一起使用,但结果是相同的。 Blob 容器可安装到 VM,但不能直接安装到 Docker 容器,除非设置了“--privileged”和“--network=host”选项。
还有什么我们应该尝试/检查的吗? Azure 虚拟网络设置、Docker 设置或者我们可能错过了配置 Azure 文件 NFS 共享的功能?
Ubuntu 20.04.6 LTS
Docker 24.0.5
该环境目前处于早期状态,因此不存在特殊的网络安全规则,仅存在 Azure 默认值。
还有什么我们应该尝试/检查的吗? Azure 虚拟网络设置。
必要的防火墙规则和网络安全组 (NSG) 应允许进出 VM 和 Azure 文件服务的 NFS 流量(端口 2049)。
--privileged
和 --network=host
选项。相反,请考虑使用 Docker 的桥接网络模式或自定义用户定义的网络。使用该网络启动了docker容器
docker run --network mynetwork -d myimage
volume-driver
指定为 azurefile
。该驱动程序专门设计用于与 Azure 文件配合使用。docker volume create --driver azurefile \
-o share=myshare \
-o username=myusername \
-o password=mypassword \
myvolume
正确配置 Azure 文件、虚拟网络、Docker 网络和容器卷挂载,将能够在 Docker 容器中安全挂载 Azure 文件 NFS 共享,而无需求助于
--privileged
和 --network=host
选项。