
我正在嘗試建立 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 位址。
答案1
我看到這個是因為我正在處理同樣的問題。我在以下兩個錯誤中找到了一些進一步的信息
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