Ich benutze vagrant und chef , um einen eigenen Blog in einer virtuellen Maschine zu entwickeln. Um einfachen Zugriff auf den WordPress-Ordner zu haben, habe ich einen freigegebenen Ordner erstellt.
Der Wordpress-Ordner befindet sich grundsätzlich auf meinem Host und wird als shared folder in/var/www/wordpress in der VM angehängt. Die Konfiguration ist ähnlich wie:
config.vm.share_folder "foo", "/guest/path", "/Host/path"
Mein Problem ist, dass das Eigentum an meinem VM immer vagrant:vagrant
ist, selbst wenn ich es an meinem Host ändere. Eigentumsänderungen in der VM werden ignoriert.
Ich kann nicht chown
verwenden, um den Besitz des Upload-Verzeichnisses auf www-data:www-data
zu setzen.
Es ist möglich, chmod
zu verwenden und die Zugriffsbeschränkungen in 777
zu ändern. Dies ist jedoch ein wirklich hässlicher Hack.
Hier ist was ich eigentlich will. Ist das möglich?:
Wie @StephenKing vorschlägt, können Sie die Optionen des gesamten Verzeichnisses ändern.
Die relevante Funktion ist nicht dokumentiert, aber die Quelle sagt uns:
# File 'lib/vagrant/config/vm.rb', line 53
def share_folder(name, guestpath, hostpath, opts=nil)
@shared_folders[name] = {
:guestpath => guestpath.to_s,
:hostpath => hostpath.to_s,
:create => false,
:owner => nil,
:group => nil,
:nfs => false,
:transient => false,
:extra => nil
}.merge(opts || {})
end
Grundsätzlich können Sie group, owner und acl für den gesamten Ordner festlegen. Ich habe keine Methode gefunden, um den Besitz eines verschachtelten Verzeichnisses zu ändern.
Hier ist ein Quickfix:
config.vm.share_folder "v-wordpress", "/var/www/wordpress", "/Host/path", :owner => "www-data", :group => "www-data"
@ john-syrinek
in 1.2+
config.vm.synced_folder "src/", "/srv/website",
owner: "root", group: "root"
http://docs.vagrantup.com/v2/synced-folders/basic_usage.html
Sie können das Ändern des Besitzes im Gast zulassen
config.vm.share_folder "foo", "/guest/path", "/Host/path", {:extra => 'dmode=777,fmode=777'}
Nach den tollen Tipps von @StephenKing und @aycokoster hatte ich einen Use-Case für das Mounten eines anderen Verzeichnisses mit Lesezugriff.
Ich fügte hinzu
config.vm.share_folder "foo", "/guest/path", "/Host/path", :extra => 'ro'
und
# discard exit status because chown `id -u vagrant`:`id -g vagrant` /Host/path is okay
vagrant up || true
Wie aus den anderen Antworten hervorgeht, sollten Sie wahrscheinlich den richtigen Besitzer und die richtige Gruppe mit den Konfigurationsoptionen owner
und group
einstellen.
Manchmal funktioniert dies jedoch nicht (z. B. wenn der Zielbenutzer erst später während der Bereitstellung erstellt wird). In diesen Fällen können Sie die Freigabe erneut bereitstellen:
Sudo mount -t vboxsf -o uid=`id -u www-data`,gid=`id -g www-data` /path/to/share /path/to/share