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"

PlayApps ディレクトリ内のすべて (複数のプロジェクト) を VM と共有することを目的としています。VM を起動するとssh、ディレクトリ /Shared が表示cdされ、そこに入ることができますが、内容を一覧表示しようとするとls -al、次のエラーが発生します。

ls: cannot open directory .: Operation not permitted.

/Shared を含むディレクトリで行うls -alと、これが表示されます(他のディレクトリの中でも):

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

パーミッションのエラーかと思って /Shared ディレクトリにアクセスしようとしsudo chmod 666たところ、以下のエラーが発生しました。

 chmod: cannot access '/Shared': Protocol error

一般に、Vagrant、ssh、および「ops」は私にとってかなり新しいものであるため、ポインター、提案、回答をいただければ幸いです。

4

3 に答える 3

42

vagrant ボックスが一時停止されている間に、その親ディレクトリを移動/名前変更しましたか?

その場合は、 を実行vagrant haltし、名前の変更を元に戻すvagrant upと、プロジェクト dir が戻ってくるはずです!

Vagrantfile + プロジェクト ファイルが存在する親ディレクトリの名前を変更した後、まったく同じ問題が発生しました。

VM が一時停止されている間に vagrant プロジェクトの親ディレクトリの名前を変更すると、この権限の問題が発生することを確認する追加のシナリオを実行しました。ただし、VM を完全にシャットダウンするとvagrant halt、 are free to rename .

昨日、Ubuntu precision32 ボックスで完全に機能する RoR env がありました。シェルvagrant suspendを終了し、ワークステーションを実行してシャットダウンしました。

今日、ワークステーション (ホスト マシン) を起動し、vagrant プロジェクトの親ディレクトリの名前を次のように変更しました。

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

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

その後、私は走っvagrant upvagrant ssh。VM シェルに入ると、/vagrant に cd できませんでした。

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

最初に試行された修正は runningvagrant suspendで、親ディレクトリの名前を元の値に戻し、次に runningvagrant upでした。残念ながら、それは vagrant VM 全体を台無しにし、 vagrant pergatory で立ち往生しています - 完全に起動またはシャットダウンしません。

したがって、正しい修正は、すべての vagrant ssh シェルを終了し、vagrant halt(サスペンドではなく) 実行してオフ(スリープ状態ではない) であることを確認し、最近の名前変更を親ディレクトリに戻すことです。次にvagrant up、あなたが入ることができるかどうかを確認してください/vagrant!その後、フォルダの名前を変更したい場合はvagrant halt、名前を変更して、vagrant up.

于 2013-08-05T20:31:06.567 に答える
5

@musophob の非常に詳細な回答に従って、VagrantFile を別のプロジェクト フォルダーに移動したいだけの場合は、/vagrantアクセスを修正するために常に VM をリロードする必要があることに気付きました。

私はこれを頻繁に行うことになるので、ショートカットvagrant reloadコマンドvagrant haltを使用します。このコマンドの後に a が続くだけvagrant upで、VM の準備が整います。

于 2015-06-05T15:21:49.063 に答える