【问题标题】:Accessing an NFS service running in a docker container from a computer outside the docker network从 docker 网络外部的计算机访问在 docker 容器中运行的 NFS 服务
【发布时间】:2021-08-14 02:23:57
【问题描述】:

我的设置:

比较1:

  • 操作系统=RHEL7
  • ip=192.x.x.220

Comp2

  • 操作系统=RHEL7
  • ip=192.x.x.38

Comp1 正在使用以下命令运行 nfs-server docker 容器 (erichough/nfs-server):docker run -v /home/mc/volumes/share1:/share1 -v /home/mc/exports/exports.txt:/etc/exports:ro --privileged -p 2049:2049 --name nfs erichough/nfs-server

我传递给它的导出文件包含以下内容:/share1 192.x.x.38(ro,no_root_squash,sync) /share1 192.x.x.220(ro,no_root_squash,sync) 理论上允许 comp1 和 comp2 都可以访问。

nfs-server 容器在运行时具有以下 ips,eth0 为 172.17.0.3,lo 为 127.0.0.1。

所以此时,我可以在 comp1 上执行以下操作:mount 127.0.0.1:/share1 /localshare 并且 share1 文件夹已正确挂载。

在 comp2 上,我看不到 127.0.0.1,因为据我所知,这只是 docker 网络上的 ip。所以我至少尝试了mount 192.x.x.220:/share1 /localshare,但失败了,因为那个文件夹不存在。

comp2 有没有办法直接访问那个 nfs 容器,还是我想错了?

感谢您的帮助!

【问题讨论】:

标签: docker networking ip nfs


【解决方案1】:

可能有一种更简单的方法,但我根据我对 docker 如何在运行它的主机上设置网络的理解来分享我的建议。我相信运行 docker 容器的主机(comp1)将有两个links,而不是环回。您可以通过在 comp1 上运行以下命令来验证这一点:

ip addr show

在我的 Ubuntu 16 上,我看到两个网络:

  1. 192.168.1.0/24(用于我的常规家庭局域网)
  2. 172.17.0.0/16(用于我的 docker 网络)

我相信 docker 已经将您的主机配置为充当路由器,将到达网络 192.168.1.0/24 的数据包转发到 172.17.0.0/16。您可以通过在 comp1 上运行以下命令来验证这一点,其中值 1 表示您的主机配置为充当路由器:

sudo sysctl net.ipv4.ip_forward

最后一步是在您的 comp2 中添加一个路由,以便发送到 172.17.0.0/16 的请求使用 192.x.x.220 作为路由器。

我认为您应该能够使用您提到的主机上容器的 IP 地址访问 comp1 上的 docker 容器,该地址是 172.17.0.3。

我还没有尝试过,但这很可能会奏效。

【讨论】:

  • 感谢您的帮助! comp1 上的 IP 转发已启用。因此,在 comp2 上,我使用以下方法添加了一条路由: ip route add 172.17.0.3 via 192.x.x.220 尝试挂载然后在 comp2 上使用 172.17.0.3 ip 给我留下相同的“没有这样的文件或目录”错误。我认为您的途径是正确的,我可能只是缺少一些其他基本的 nfs 配置。我会继续努力的。
  • 我想在 comp2 上添加路由后,您可以从 comp2 运行 ping 172.17.0.3 以验证您是否能够与容器通信?如果 ping 成功,则很可能是 nfs 配置问题。
猜你喜欢
  • 2023-03-07
  • 2023-01-24
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多