我有一个Vagrant环境,我非常想使用NFS在端口80上启动它。前者是因为它是Drupal和非标准端口导致了一些心痛,后者纯粹是为了性能。要做到这一点,据我所知,我需要使用sudo。没问题,sudo vagrant up是的。
我遇到的问题是,应用程序生成文件,大概是因为VM是在sudo下运行的,这些文件是由主机系统(OS )上的root拥有的,所以当应用程序试图将文件写入服务器时,权限被拒绝。
我修改了Vagrant文件,将整个项目目录设置为777。为了便于披露,下面是来自我的Vagrantfile的相关(和非标准的)片段。
config.vm.network :hostonly, "192.168.33.10"
config.vm.forward_port 80, 80
# config.vm.share_folder( "v-root", "/vagrant", ".", :nfs => (RUBY_PLATFORM =~ /mingw32/).nil?, :extra => 'dmode=777,fmode=777' )
config.vm.share_folder( "v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777' )
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
Vagrant::Config.run do |config|
config.vm.provision :shell, :path => "provision.vm.sh"
end我看到的是这样的情况:
/vagrant的内容时,并没有给出完整的perms (777)。这些变化之前的情况就是如此。
/vagrant中的文件(同样,在VM中查看时)是由dialout用户拥有的。这似乎是一个NFS的事情,所以没有问题,只要我能让第一项工作。
更新
看起来问题可能是我对NFS工作原理的理解。我需要尝试纠正这一点,但是如果我只是删除NFS组件(现在是注释&在上面的片段中被替换),事情似乎更有用了。仍然很想知道其他人是否已经/如何处理了这个问题。
发布于 2014-06-20 10:19:07
我没有执行sudo vagrant up (这并不理想),而是执行以下操作:
if Vagrant::Util::Platform.windows?
config.vm.network :forwarded_port, host: 80, guest: 8080
elsif Vagrant::Util::Platform.darwin?
config.vm.network :forwarded_port, host: 8080, guest: 80
config.vm.network :forwarded_port, host: 8443, guest: 443
config.trigger.after [:provision, :up, :reload] do
puts " ==> Sudo Password (to forward ports) "
system('echo "
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 443 -> 127.0.0.1 port 8443
" | sudo pfctl -f - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 8443"')
end
else
config.vm.network :forwarded_port, host: 8080, guest: 80
config.vm.network :forwarded_port, host: 8443, guest: 443
puts " ==> Sudo Password (to forward ports) "
system("sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80;
sudo ipfw add 101 fwd 127.0.0.1,8443 tcp from any to me 443")
end
if Vagrant::Util::Platform.darwin?
config.trigger.after [:halt, :destroy] do
system("sudo pfctl -f /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding'")
end
end(该节的linux部分不像OS (“达尔文”)节那样整洁,该节删除了在vagrant halt上转发的端口)
所做的工作是在主机上设置端口8080 (和8443),以便在客人上转发到80,然后使用sudo将主机上的端口80转发到主机上的端口8080。
这意味着只有端口80转发是作为根进行的,而不是整个漂泊过程,并且通常会使我更快乐。
注意:如果skype将自己绑定到端口80和443 (默认情况下),这仍然会在桌面计算机上失败。
https://stackoverflow.com/questions/15570148
复制相似问题