Ubuntu

NFS 無法解析主機名

  • December 23, 2020

我正在嘗試創建一個 NFS docker 卷,但是我無法通過主機名來創建。

我正在創建卷:

sudo docker volume create --name foo_bar --driver local \
 --opt type=nfs4 \
 --opt o=addr=foo.lan.domain.xyz,rw,noatime,rsize=8192,wsize=8192,tcp,timeo=14 \
 --opt device=:/volume1/bar

但是,當我嘗試創建一個使用此卷的 docker 容器時,我看到:

docker: Error response from daemon: failed to mount local volume: mount :/volume1/bar:/var/lib/docker/volumes/foo_bar/_data, flags: 0x400, data: addr=foo.lan.domain.xyz,rsize=8192,wsize=8192,tcp,timeo=14: invalid argument.

系統日誌顯示:

kernel: [ 1662.349322] NFS: bad IP address specified: addr=foo.lan.domain.xyz

似乎 NFS 在連接之前沒有嘗試解析域名。這個域名當然是有效的。

$ host foo.lan.domain.xyz
foo.lan.domain.xyz has address 10.0.0.3

$ nslookup foo.lan.domain.xyz
Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
Name:   foo.lan.domain.xyz
Address: 10.0.0.3

$ showmount -e foo.lan.domain.xyz
Export list for foo.lan.domain.xyz:
/volume1/qux   lore.lan.domain.xyz

$ getent hosts 10.0.0.3
10.0.0.3        Bar.lan.domain.xyz

如何讓 NFS 解析此主機名?如果可以提供幫助,我真的寧願不要對 IP 地址進行硬編碼。

我看到這個是因為我正在處理同樣的問題。我在以下兩個錯誤中找到了一些進一步的資訊

https://github.com/moby/moby/pull/27329

https://github.com/moby/moby/issues/31365

事實證明,docker 總是期待type=nfs並期待您通過添加另一個選項來設置版本。你的命令應該是

sudo docker volume create --name foo_bar --driver local \
 --opt type=nfs \
 --opt o=addr=foo.lan.domain.xyz,rw,noatime,rsize=8192,wsize=8192,tcp,timeo=14,nfsvers=4 \
 --opt device=:/volume1/bar

您可以通過在容器執行時執行此命令來驗證掛載使用的版本

sudo nfsstat -m

引用自:https://serverfault.com/questions/1046360