Vagrant SSH无法访问共享目录

时间:2013-08-01 17:55:21

标签: virtual-machine vagrant

我的主机上有一个带有项目结构的vagrant vm设置,如下所示:

PlayApps --> App1 -----------> all application/project files
             App2 -----------> ""
             App3 -----------> ""
             (etc..)
             .VagrantFiles --> VagrantFile
                               bootstrap.sh
                               (etc...)

cd进入我的.VagrantFiles目录,然后启动VM。在我的VagrantFile中,我正在共享这个目录:

config.vm.synced_folder "../", "/Shared"

目标是与VM共享PlayApps目录中的所有内容(多个项目)。当我启动VM并ssh时,我看到目录/ Shared,我可以cd进入它,但是当我尝试用ls -al列出内容时,我收到以下错误:

ls: cannot open directory .: Operation not permitted.

当我在包含/ Shared的目录上ls -al时,这就是我所看到的(以及其他目录中):

d?????????  ? ?    ?        ?            ? Shared/ and 
d?????????  ? ?    ?        ?            ? vagrant/

我尝试sudo chmod 666 / Shared目录,认为这是权限错误,但出现以下错误:

 chmod: cannot access '/Shared': Protocol error

Vagrant,ssh和“ops”对我来说是相当新的,所以任何指针,建议和答案都会非常感激。

3 个答案:

答案 0 :(得分:41)

您的流浪者盒子被暂停时是否已移动/重命名了任何父目录?

如果有,请运行vagrant halt,撤消所有重命名,然后vagrant up,你的项目目录应该回来了!

重命名我的Vagrantfile +项目文件所在的父目录后,我遇到了完全相同的问题。

执行其他方案,确认在VM挂起时重命名流浪者项目的父目录会导致此权限问题;但是,如果您使用vagrant halt完全关闭虚拟机,您可以自由重命名

昨天在Ubuntu exact32上有一个功能完善的RoR环境。退出shell,运行vagrant suspend并关闭我的工作站。

今天我启动了我的工作站(主机)并重命名了我的vagrant项目的父目录,如下所示:

└── ORIGINAL_DIR_NAME
    ├── Vagrantfile
    └── PROJECT

└── NEW_DIR_NAME
    ├── Vagrantfile
    └── PROJECT

之后,我运行了vagrant upvagrant ssh。一旦进入VM shell,我就无法进入/ vagrant。

来自guest shell的

ls -alh /返回:

ls: cannot access /vagrant: Protocol error
[...]
drwxrwxrwt  2 root root 4.0K Aug  4 21:17 tmp
drwxr-xr-x 10 root root 4.0K Sep 14  2012 usr
d?????????  ? ?    ?       ?            ? vagrant
drwxr-xr-x 11 root root 4.0K Aug  4 19:23 var
[...]

还尝试了/vagrant上的chmod并得到了这个:

chmod: cannot access `/vagrant': Protocol error

首次尝试修复正在运行vagrant suspend,将父目录重命名为其原始值,然后运行vagrant up。不幸的是,它破坏了整个流浪汉的VM并且它被困在流浪的暴君中 - 不会完全启动或关闭。

所以,正确修复是退出所有流浪汉ssh shell,运行vagrant halt(不暂停)以确保它 OFF (不是睡着了),并将任何最近的重命名还原为父目录。然后vagrant up,看看你是否可以进入/vagrant!之后,如果您只想重命名文件夹vagrant halt,请重命名,vagrant up

答案 1 :(得分:3)

按照@ musophob的详细解答,我意识到如果您只是想将VagrantFile移动到另一个项目文件夹,则必须重新加载VM,以修复/vagrant访问权限。

由于我最终经常这样做,我使用快捷方式vagrant reload command - 这只是vagrant halt后跟vagrant up并且VM准备就绪。

答案 2 :(得分:1)

我现在已经多次遇到同样的问题 - 虽然不是在重命名父目录或移动Vagrantfile时,而是在主机上创建或重命名文件时 。由于这种情况很少发生,原因不明,我无法故意重现这一点。

尽管如此,一个简单的vagrant reload 修复了问题。