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服务器。我已经在问题中发布了更多详细信息。我的工作笔记本电脑上有这个问题。我将尝试在我的家用机器上复制它。我希望这不是公司的恶意软件问题。