Vagrant: как синхронизировать папку с гостем обратно на хост?
почему, потому что трудно работать и редактировать код через устаревшие Редакторы в гостях. Вся цель vagrant - быть более легким для разработчика, верно:)?
как таковой я прошу кого-то вести меня в этой ситуации:
- нужно работать над проектом. Это git repo. Требуется mysql, php и т. д.
- VM отлично работает (при условии)
- но редактирование файлов в этом РЕПО не так просто через ssh и" устаревшие " Редакторы. Захотите использовать любимый IDE.
на репо VM находится в /home/vagrant/src
.
Я хочу, чтобы он был видимым/редактируемым в ../src
в хост.
Я прочитал документы и поместил это в Vagranfile:
config.vm.synced_folder '../src', '/home/vagrant/src'
это "работает", за исключением того, что он переписывает все содержимое из /home/vagrant/src
с ../src
где пусто.
любой обходной путь? Я рассмотрел возможность клонирования РЕПО через git (общедоступный через github) и синхронизации папки с виртуальной машиной но это не кажется правильным и потерять производственные конфигурации тоже.
7 ответов
мой Vagrantfile
выглядит так:
Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network :forwarded_port, guest: 22, host: 10170, id: "ssh"
config.vm.provision :shell, path: "VagrantProvision.sh"
config.vm.synced_folder "./", "/var/beeGame"
end
как вы можете видеть здесь, у меня есть то же самое заявление, что и у вас! вот мое РЕПО (вы можете попробовать это как пример), и это работает для меня! Я использую PhpStorm для автоматического открытия этого РЕПО и редактирования файлов и всех обновлений и синхронизации с моей хост-машины (моего ноутбука) на гостевую машину (виртуальную).
в вашем случае, у вас все в порядке, и Бродяга должен переписать все содержимое из /home/vagrant/src
С ../src
. Это правильное поведение!!! Вам нужно поместить свой код в src
dir на вашем хост-компьютере (вашем ноутбуке) не на вашей гостевой машине (виртуальной)!
Кажется, что вы ищете двухстороннюю синхронизацию. Если мое понимание правильно, это ответ поможет вам. Обратите внимание, что я еще не тестировал их. Похоже, ключ должен использовать virtualbox
синхронизация тип.
type (string) - тип синхронизированной папки. Если это не указано, Vagrant автоматически выберет лучший вариант синхронизированной папки для ваша среда. В противном случае можно указать определенный тип, например "сетевая файловая система."
config.vm.synced_folder '../src', '/home/vagrant/src', type: "virtualbox"
затем снова в соответствии с этот документ,
Если вы используете поставщик Vagrant VirtualBox, то VirtualBox общие папки-это тип синхронизированных папок по умолчанию. Эти синхронизированные папки используйте систему общих папок VirtualBox для синхронизации изменений файлов от гостя к хозяину, и наоборот.
поэтому я не уверен, почему ваш тип по умолчанию не virtualbox. В любом случае, думаю, стоит попробовать. Далее в документах, похоже, есть ошибка в типе виртуального окна, объясненном в документах. Пожалуйста, следуйте за шаги если вы собираетесь использовать тип синхронизации virtual box.
Я определил, что проблема не в этом config.vm.synced_folder '../src', '/home/vagrant/src'
перезаписывает / home/vagrant / src. Проблема в том, что home/vagrant/src становится новым каталогом другого типа в файловой системе, который пуст. Таким образом, нужно просто повторно заполнить его после настройки общего каталога. Так...
- на Guest:
sudo mv home/vagrant/src home/vagrant/src-back
- остановка гость
- добавить новую синхронизированную папку в Vagrantfile:
config.vm.synced_folder '../src', '/home/vagrant/src'
- пуск гость
- на гостя:
sudo mv home/vagrant/src-back/* home/vagrant/src-back/
и все должно хорошо работать в будущем.
можно использовать rsync
с Vagrant, он имеет встроенную поддержку. Вот это ссылке в документации. Хотя это тривиально для rsync
чтобы игнорировать чрезмерные файлы в target (возможно, поведение по умолчанию), вы все равно можете точно синхронизировать, защищая свои целевые файлы с помощью protect фильтр.
в отличие от монтажа, rsync
должен запускаться вручную. Однако, вы все еще можете использовать бродяги rsync-auto
функция документирована здесь для a простые часы файловой системы.
похоже, вы хотите поделиться папкой С гостевая машина С хост-машина, которая является своего рода противоположностью тому, что делают обычные общие папки.
вы думали о предоставлении NFS на гостя, а затем с помощью залет-триггеры для монтирования доли от гостя на хост.
первый запуск путем установки vagrant-triggers:
vagrant plugin install vagrant-triggers
Vagrantfile
как это:
# where you want to mount the guest's shared folder on the host
host_mount_dir = "/home/david/vagrant-home"
Vagrant.configure(2) do |config|
config.vm.box = "debian/jessie64"
# forward the NFS port
config.vm.network "forwarded_port", guest: 2049, host: 8049
# configure NFS on guest
config.vm.provision "shell", inline: <<SCRIPT
apt-get install -y nfs-kernel-server nfs-common
host_ip="$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)"
echo "/home/vagrant $host_ip(rw,sync,no_subtree_check)" > /etc/exports
exportfs -a
SCRIPT
# after the machine is up, mount the NFS share
config.trigger.after :up do
# mkake the dir if it doesnt exist
run "mkdir -p " + host_mount_dir
# we need the users pass to mount (make sure you are a sudoer!)'
puts "Please enter your password so that we can run mount"
run "sudo mount -t nfs -o port=8049 localhost:/home/vagrant #{host_mount_dir}"
end
# before halting, unmount the share
config.trigger.before :halt do
# we need the users pass again
puts "Please enter your password so that we can run mount"
run "sudo umount #{host_mount_dir}"
end
end
Это необычная настройка, но я тестировал ее сейчас с хостом Ubuntu и гостем Debian, и, похоже, она работает - YMMV.
Я работаю с бродягой с этой структурой:
Vagrantfile
MyCode.php
и Vagrantfile содержит:
config.виртуальная память.synced_folder ".", "/бродяга"
это означает, что MyCode.php отображается внутри машины vagrant в папке /vagrant. Я могу редактировать этот файл как с бродячей машины (гость), так и с моей машины (хост).
я использовал следующий хак для rsync папку от гостя к хосту:
- во-первых, получить конфигурацию SSH для коробки и сохранить его на
ssh_config
$ vagrant ssh-config > ssh_config
- затем использовать
rsync
гостевая папка возвращается на хост с заданной конфигурацией
$ rsync -avH -e "ssh -F ./ssh_config" default:/vagrant/ ./
это сработало для меня, и я надеюсь, что это сработает для вас!