20

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

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

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

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

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

ls: cannot open directory .: Operation not permitted.

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

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

我尝试sudo chmod 666了 /Shared 目录,以为是权限错误,但得到以下错误:

 chmod: cannot access '/Shared': Protocol error

Vagrant、ssh 和“ops”一般对我来说是相当新的,所以任何指针、建议和答案都将不胜感激。

4

3 回答 3

42

您是否在挂起时移动/重命名了 vagrant box 的任何父目录?

如果是这样,运行vagrant halt,撤消任何重命名,然后vagrant up你的项目目录应该回来了!

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

运行其他场景,确认在 VM 挂起时重命名 vagrant 项目的父目录会导致此权限问题;但是,如果您完全关闭虚拟机,vagrant halt您可以自由重命名.

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

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

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

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

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

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
[...]

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

chmod: cannot access `/vagrant': Protocol error

第一次尝试修复正在运行vagrant suspend,将父目录重命名回其原始值,然后运行vagrant up​​. 不幸的是,这破坏了整个 vagrant VM,它被困在 vagrant pergatory 中 - 不会完全启动或关闭。

因此,正确的解决方法是退出所有 vagrant ssh shell,运行vagrant halt(不是挂起)以确保它处于关闭状态(不是休眠),并将最近重命名的所有内容恢复为父目录。然后vagrant up看看能不能进去/vagrant!之后,如果您想重命名文件夹,只需vagrant halt、重命名和vagrant up.

于 2013-08-05T20:31:06.567 回答
5

在@musophob 的详细回答之后,我意识到如果您只是想将 VagrantFile 移动到不同的项目文件夹,您总是必须重新加载 VM,以修复/vagrant访问权限。

由于我经常这样做,所以我使用快捷vagrant reload命令- 这只是简单地vagrant halt跟着 avagrant up并且 VM 准备好了。

于 2015-06-05T15:21:49.063 回答
4

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

然而,一个简单的vagrant reload 解决了这个问题。

于 2015-06-25T21:49:36.170 回答