我有一个带厨师长的流浪汉盒子。除了NFS资源上的操作之外,一切都很好。例如,我有以下同步文件夹:
"host_path": "/Users/User/devbox/vdd/data",
"guest_path": "/var/www",
"type": "nfs"在流浪汉的档案里:
# Synced Folders.
config_json["vm"]["synced_folders"].each do |folder|
case folder["type"]
when "nfs"
config.vm.synced_folder folder["host_path"], folder["guest_path"], type: "nfs"
# This uses uid and gid of the user that started vagrant.
config.nfs.map_uid = Process.uid
config.nfs.map_gid = Process.gid我还有一个厨师食谱,它在nfs资源上执行一个create操作:
directory "/var/www" do
owner "vagrant"
group "vagrant"
end但是,我一直收到以下错误:
default: Error executing action `create` on resource 'directory[/var/www]'
==> default: ================================================================================
==> default:
==> default:
==> default: Errno::EPERM
==> default: ------------
==> default: Operation not permitted - /var/www
==> default:
==> default:
==> default: Resource Declaration:
==> default: ---------------------
==> default: # In /tmp/vagrant-chef-3/chef-solo-2/cookbooks/vdd/recipes/apache.rb
==> default:
==> default: 1: directory "/var/www" do
==> default: 2: owner "vagrant"
==> default: 3: group "vagrant"
==> default: 4: end
==> default: 5:
==> default:
==> default:
==> default:
==> default:
==> default: Compiled Resource:解决问题(并保留nfs)的唯一方法是:
nfs更改为default。vagrant reload --provisiondefault更改为nfsvagrant reload我已经搜索并尝试了各种建议的解决方案,但到目前为止对我没有任何作用。
发布于 2017-02-10 17:16:46
我通过传递after: :provision,选项,告诉迷航者在供应之后挂载nfs资源,从而解决了这个问题。下面是我的迷走片文件中的代码行:
config.bindfs.bind_folder "/var/nfs-#{i}", folder["guest_path"], after: :provision, perms: "u=rwX:g=rwX:o=rD", o: 'nonempty'发布于 2015-07-25 17:17:45
操作不允许的问题很常见,在StackOverflow上问了很多问题,而且在我看过的每一个案例中,这都是因为虚拟机(Vagrant )正在尝试执行文件权限操作(chmod、chown、chgrp等等)。在一个目录中(通过NFS或其他方式)链接到主机操作系统(主计算机)上的文件系统。我不想让你对细节感到厌烦,但这会给某些人带来错误,有时也不会给其他人带来麻烦。您在评论中的解决方案说明了这一点!
如果您是受此问题影响的人之一,您必须确保您的文件共享除了来宾操作系统中的只读文件结构之外,不需要其他任何东西;任何需要更改或写入这些文件的内容,例如php composer.phar install (或其他更改/设置/写入文件的内容),都应该在主机上直接执行。
最后要指出的是,Vagrant (虚拟机)应该是一次性的,可以在一开始就销毁;而且,您正在从虚拟机运行代码,从而导致可能永远需要的文件作为项目的一部分,这在表面上违背了这一策略。
替代解决方案:
或者,如果您需要在虚拟化环境(如果愿意的话)中运行代码,需要不受限制地访问该客户操作系统的权限功能,那么只需在其目录树的位置运行代码,该目录树不受本地对来宾“文件夹源”到“文件夹目标”映射的影响。如果是基于Linux的话,可以使用mount命令从Vagrant中分辨出哪个文件夹在这个范围内。
发布于 2016-02-10 09:38:02
这是一个更重要的评论,而不是一个答案。在我的迷航配置中,我“意外地(误解-ly)”运行了$ sudo vagrant up (正确地运行了$ vagrant destroy dev- -这就使本地(主机)文件共享更改为# root,当我重新运行$ vagrant up时,新的$ vagrant up无法使用# root创建的“流浪者”文件夹(尽管我没有更多的vm)。
^
|
hard to explain easy to actually understandTL;DR如果您使用sudo和迷航器,您需要手动删除/减少主机上的剩余更改为非sudo。
https://stackoverflow.com/questions/28157780
复制相似问题