Docker Makefile未在NFS上扩展文件*通配符

Docker Makefile未在NFS上扩展文件*通配符,docker,makefile,nfs,macos-high-sierra,vmware-fusion,Docker,Makefile,Nfs,Macos High Sierra,Vmware Fusion,我有以下设置: UbuntuLTS客人 运行MacOS 10.13.5(17F77)的MacBook Pro 虚拟机监控程序是VMware Fusion Professional版本8.5.9(7098239) NFS从MacBook主机导出到Ubuntu来宾 这是/etc/exports中的相关行: /Users/stephenrasku/w/Edge-Agent -alldirs -mapall=501:20 edgeos-dev 我有以下Makefile: build: ls

我有以下设置:

  • UbuntuLTS客人
  • 运行MacOS 10.13.5(17F77)的MacBook Pro
  • 虚拟机监控程序是VMware Fusion Professional版本8.5.9(7098239)
  • NFS从MacBook主机导出到Ubuntu来宾
这是
/etc/exports
中的相关行:

/Users/stephenrasku/w/Edge-Agent -alldirs -mapall=501:20 edgeos-dev
我有以下
Makefile

build:
    ls -l
    ls -l foo*
当我在NFS挂载上的
i386
容器中运行它时,它会失败。我正在运行VMware Fusion:

$ docker run --rm -t -v /home/stephen/some-nfs-mount:/home/edge registry.gear.ge.com/predix_edge/edge-agent-i386 "cd tmp && make"
Setting uid/gid to 501 501
ls -l
total 4
-rw-r--r-- 1 builduser builduser 26 Sep 25 17:58 Makefile
-rw-r--r-- 1 builduser builduser  0 Sep 25 17:58 bart
-rw-r--r-- 1 builduser builduser  0 Sep 25 17:58 fool
ls -l foo*
ls: cannot access 'foo*': No such file or directory
Makefile:2: recipe for target 'build' failed
make: *** [build] Error 2
如果我将存储库克隆到本机文件系统并将其绑定到容器中,
i386
容器可以工作:

$ docker run --rm -t -v /home/stephen/this-directory-is-not-nfs:/home/edge registry.gear.ge.com/predix_edge/edge-agent-i386 "cd tmp && make"
Setting uid/gid to 501 501
ls -l
total 8
-rw-rw-r-- 1 builduser builduser 971 Sep 26 14:21 Dockerfile-i386
-rw-rw-r-- 1 builduser builduser  26 Sep 26 15:06 Makefile
-rw-rw-r-- 1 builduser builduser   0 Sep 26 14:21 bart
-rw-rw-r-- 1 builduser builduser   0 Sep 26 14:21 fool
ls -l foo*
-rw-rw-r-- 1 builduser builduser 0 Sep 26 14:21 fool
$ docker run --rm -t -v /home/stephen/some-nfs-mount:/home/edge registry.gear.ge.com/predix_edge/edge-agent-x86_64 "cd tmp && make"
Setting uid/gid to 501 501
ls -l
total 4
-rw-r--r-- 1 builduser builduser 26 Sep 25 17:58 Makefile
-rw-r--r-- 1 builduser builduser  0 Sep 25 17:58 bart
-rw-r--r-- 1 builduser builduser  0 Sep 25 17:58 fool
ls -l foo*
-rw-r--r-- 1 builduser builduser 0 Sep 25 17:58 fool
如果在
x86_64
容器中运行,它也可以在NFS上运行:

$ docker run --rm -t -v /home/stephen/this-directory-is-not-nfs:/home/edge registry.gear.ge.com/predix_edge/edge-agent-i386 "cd tmp && make"
Setting uid/gid to 501 501
ls -l
total 8
-rw-rw-r-- 1 builduser builduser 971 Sep 26 14:21 Dockerfile-i386
-rw-rw-r-- 1 builduser builduser  26 Sep 26 15:06 Makefile
-rw-rw-r-- 1 builduser builduser   0 Sep 26 14:21 bart
-rw-rw-r-- 1 builduser builduser   0 Sep 26 14:21 fool
ls -l foo*
-rw-rw-r-- 1 builduser builduser 0 Sep 26 14:21 fool
$ docker run --rm -t -v /home/stephen/some-nfs-mount:/home/edge registry.gear.ge.com/predix_edge/edge-agent-x86_64 "cd tmp && make"
Setting uid/gid to 501 501
ls -l
total 4
-rw-r--r-- 1 builduser builduser 26 Sep 25 17:58 Makefile
-rw-r--r-- 1 builduser builduser  0 Sep 25 17:58 bart
-rw-r--r-- 1 builduser builduser  0 Sep 25 17:58 fool
ls -l foo*
-rw-r--r-- 1 builduser builduser 0 Sep 25 17:58 fool
i386
容器是来自i386/ubuntu:18.04的
,而
x86\u 64
容器是来自ubuntu:18.04的


除了“不要使用NFS”之外,还有什么方法可以解决这个问题吗?

听起来在i386映像的shell上,通配符函数不知怎么被禁用了

尝试
set+o noglob
为您的
registry.gear.ge.com/predix_edge/edge-agent-i386启用它

下面是一些试验,仅供参考

# set -o noglob
# ls Doc*
ls: cannot access Doc*: No such file or directory
# set +o noglob
# ls Doc*
Dockerfile

当您在命令行上尝试这些命令时,是否会发生同样的情况?如果是这样,那么这个问题与Make无关。它不会发生在命令行上。不幸的是,这没有解决它:set+o noglob&&ls-l foo*ls:无法访问“foo*”:没有这样的文件或目录奇怪的是,我试图用新更新的
nfs
matter重现您的问题。但我无法复制它,我这边的一切都正常,甚至使用了
nfs
。我的nfs设置:
/nfsroot*(rw,sync,no\u root\u squash)
。我的挂载:
mount-tfs-onlock 10.192.224.45:/nfsroot kkk
。Docker命令:
Docker run--rm-t-v/root/kkk:/root with make bash-c“cd/root&&make”
,我的输出是:
ls-l foo*-rw-rw-r--1 1000 000 2018年9月27日傻瓜
<代码>Dockerfile
对于
withmake
从i386/ubuntu:18.04运行apt-get-update和apt-get-install-make
。您可以查看您的部分是否有任何不同,您可能需要进行比较,以了解您的情况发生了什么。我注意到的一个不同之处是,它显示为您正在使用Linux NFS服务器。我正在使用MacOS NFS服务器。我已经在问题中发布了更多详细信息。我的工作笔记本电脑上有这个问题。我将尝试在我的家用机器上复制它。我希望这不是公司的恶意软件问题。