无法将 NFS 文件共享挂载到 Azure VM 上运行的 Docker 容器

问题描述 投票:0回答:1

我们希望将在多个 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 docker ubuntu-20.04 nfs docker-networking
1个回答
0
投票

还有什么我们应该尝试/检查的吗? Azure 虚拟网络设置。

必要的防火墙规则和网络安全组 (NSG) 应允许进出 VM 和 Azure 文件服务的 NFS 流量(端口 2049)。

enter image description here

  • 为了安全实用的 Docker 容器网络,请避免使用
    --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
  • 如果您的虚拟机正在运行 SELinux(在 CentOS/RHEL 上常见),请检查它们是否阻止 Docker 容器访问 NFS 共享。我们也可以通过 AppArmor 运行(在 Ubuntu 上很常见),但是如果你在我的下图中看到它不支持 Image。

enter image description here

正确配置 Azure 文件、虚拟网络、Docker 网络和容器卷挂载,将能够在 Docker 容器中安全挂载 Azure 文件 NFS 共享,而无需求助于

--privileged
--network=host
选项。

© www.soinside.com 2019 - 2024. All rights reserved.