ホストマシンに次のようなプロジェクト構造を持つvagrantvmセットアップがあります。
PlayApps --> App1 -----------> all application/project files
App2 -----------> ""
App3 -----------> ""
(etc..)
.VagrantFiles --> VagrantFile
bootstrap.sh
(etc...)
.VagrantFilesディレクトリにcd
してから、VMを起動します。そのための私のVagrantFileでVM私はこのディレクトリを共有しています:
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"は一般的に私にとってはかなり新しいので、ポインタ、提案、回答をいただければ幸いです。
一時停止中に、vagrantボックスの親ディレクトリを移動/名前変更しましたか?
その場合は、vagrant halt
を実行し、名前の変更を元に戻します。次にvagrant up
を実行すると、プロジェクトディレクトリが元に戻ります。
Vagrantfile +プロジェクトファイルが存在する親ディレクトリの名前を変更した後、まったく同じ問題が発生しました。
VMが一時停止されている間にvagrantプロジェクトの親ディレクトリの名前を変更すると、このアクセス許可の問題が発生することを確認する追加のシナリオを実行しました; 、VM with vagrant halt
を完全にシャットダウンした場合は、自由に名前を変更できます。
昨日はUbuntuexact32ボックスで完全に機能するRoR環境がありました。シェルを終了し、vagrant suspend
を実行して、ワークステーションをシャットダウンしました。
今日、私はワークステーション(ホストマシン)を起動し、vagrantプロジェクトの親ディレクトリの名前を次のように変更しました。
└── ORIGINAL_DIR_NAME
├── Vagrantfile
└── PROJECT
└── NEW_DIR_NAME
├── Vagrantfile
└── PROJECT
その後、vagrant up
、vagrant ssh
を実行しました。 VM Shellに入ると、/ 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
[...]
また、/vagrant
でchmodを試し、これを取得しました:
chmod: cannot access `/vagrant': Protocol error
最初に試みられた修正は、vagrant suspend
を実行し、親ディレクトリの名前を元の値に戻し、次にvagrant up
を実行することでした。残念ながら、それはvagrant全体をゴミ箱に捨てましたVMそしてそれはvagrantpergatoryで立ち往生しています-完全に起動またはシャットダウンしません。
したがって、正しい修正は、すべてのvagrant sshシェルを終了し、vagrant halt
(サスペンドではない)を実行して[〜#〜] off [〜#〜](スリープ状態ではありません)、最近の名前変更を親ディレクトリに戻します。次に、vagrant up
を実行して、/vagrant
に入ることができるかどうかを確認します。その後、フォルダの名前をvagrant halt
だけにしたい場合は、名前を変更してvagrant up
にします。
@musophobの非常に詳細な回答に続いて、VagrantFileを別のプロジェクトフォルダーに移動するだけの場合は、/vagrant
アクセスを修正するために、常にVMをリロードする必要があることに気付きました。
私はこれを十分頻繁に行うことになったので、ショートカットを使用します vagrant reload
コマンド -これは単にvagrant halt
の後にvagrant up
とVMの準備ができました。
同じ問題を何度か経験しましたが、親ディレクトリの名前を変更したり、Vagrantfileを移動したりするときではなく、ホストでファイルを作成または名前変更するときです。これは不明な理由で非常にまれにしか発生しないため、意図的に再現することはできませんでした。
それにもかかわらず、単純なvagrant reload
修正問題。