Бродяга с провайдером Hyper-V для управления усадьбой Laravel
Используя новую версию Laravel с Laravel Homestead, я пытался запустить Vagrant, но время ожидания истекло. Я пытался использовать Default
виртуальный коммутатор, а также DockerNAT
а также NewInternalVirtualSwitch
виртуальный коммутатор, который я добавил с помощью диспетчера Hyper-V.
Я знаю, что могу оставить провайдера как VirtualBox и отключить Hyper-V, но поскольку мы используем Vagrant и Docker для разных приложений, делать это в течение последних нескольких дней стало утомительно, так как Docker for Windows
в Windows 10 Pro требуется, чтобы Hyper-V был включен, поэтому каждый раз, когда вам приходится выключаться и перезапускаться в любом направлении.
Кто-нибудь заставлял Laravel Homestead работать с провайдером Hyper-V, и какие шаги вам пришлось предпринять, чтобы наладить работу сети, что, похоже, является проблемой?
Homestead.yaml
ip: 192.168.10.10
memory: 2048
cpus: 1
provider: hyperv
authorize: ~/.ssh/example/id_rsa.pub
keys:
- ~/.ssh/example/id_rsa
folders:
-
map: 'D:\Projects\example\server'
to: /home/vagrant/server
sites:
-
map: server.app
to: /home/vagrant/server/public
databases:
- example
name: example
hostname: example
Vagrant Up
Bringing machine 'example' up with 'hyperv' provider...
==> example: Verifying Hyper-V is enabled...
==> example: Importing a Hyper-V instance
example: Please choose a switch to attach to your Hyper-V instance.
example: If none of these are appropriate, please open the Hyper-V manager
example: to create a new virtual switch.
example:
example: 1) DockerNAT
example: 2) Default Switch
example: 3) NewInternalVirtualSwitch
example:
example: What switch would you like to use? 3
example: Cloning virtual hard drive...
example: Creating and registering the VM...
example: Setting VM Integration Services
example: Successfully imported a VM with name: ubuntu-16.04-amd64_1
==> example: Starting the machine...
==> example: Waiting for the machine to report its IP address...
example: Timeout: 120 seconds
example: IP: fe80::215:5dff:fe38:107
==> example: Waiting for machine to boot. This may take a few minutes...
example: SSH address: fe80::215:5dff:fe38:107:22
example: SSH username: vagrant
example: SSH auth method: private key <--- Stalls out for a couple minutes
ошибка
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.
If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.
If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.
If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.
Обновить
Также попробовал совет 4, используя внешний виртуальный коммутатор, и он делает это дальше, но все равно не удается с ошибкой при попытке назначить имя хоста:
==> example: Machine booted and ready!
==> example: Setting hostname...
No host IP was given to the Vagrant core NFS helper. This is
an internal error that should be reported as a bug.
3 ответа
Изменить: После настройки всего этого и тестирования рабочего процесса, я вернулся к VirtualBox + Homestead и отключил Hyper V. Суть в том, что Windows и Linux не очень совместимы друг с другом, и хотя Hyper V является родным для Windows, все, что следует не будет, и даже такие простые задачи, как копирование файлов и установка разрешений, требуют большого труда.
Я оставлю свой ответ ниже, может быть, кто-то еще, или я вернусь к нему в будущем.
Я просто провел день, пытаясь заставить его работать, и я не мог, но я нашел решение, которое работает лучше для меня, по крайней мере, поэтому я поделюсь им здесь.
Если ваша рабочая станция работает под управлением Windows 10 Pro с Hyper V и вы знаете, как настроить рабочий сервер, то это может помочь вам.
Идея состоит в том, чтобы отказаться от Homestead и настроить свой локальный сервер так же, как вы работаете на производственном сервере, но на Hyper V:
- Включить Hyper V
- Загрузите образ операционной системы вашего сервера (для меня Ubuntu 18.04) и создайте на нем виртуальную машину.
- Выберите то, что вам нужно, из списка программного обеспечения, включенного в Hometead, и установите его на виртуальной машине (для меня это Nginx, PHP, PostgreSQL, Git, Python и Composer).
На данный момент у вас есть свой собственный Homestead на Hyper V. Войдите в виртуальную машину, скопируйте ее ip (он должен отображаться при входе в систему, но если нет, вот команда, чтобы вызвать его в Ubuntu ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
), введите его в окно браузера, и оно должно открыть главную страницу Nginx по умолчанию.
Это довольно просто, но проблема в том, что этот динамический IP-адрес будет сбрасываться. Самое сложное - сделать его статичным.
Установите ip в диспетчере Hyper-V на статический
right click the virtual machine -> Settings -> Network Adapter -> Advanced Features
, Перезагрузите всеУстановите ip на static в ОС на виртуальной машине ( руководство для Ubuntu 18.04). Обратите внимание, что IP-адрес хост-адаптера Hyper V vEthernet (
ipconfig
на Win 10, чтобы вызвать его) адрес шлюза для ОС виртуальной машины.
Так что плюсы и минусы с моей точки зрения.
Плюсы:
- Работает быстрее и чище в Windows + Hyper V, чем в Windows + Oracle Virtual Box
- Настраиваемый и обновляемый. Единственный способ обновить Homestead - это удалить его и загрузить новый.
Минусы:
- Трудно настроить, если вы не знакомы с настройкой вашего производственного сервера
- Настройка статического IP-адреса - это очень болезненный взлом
- Доступ к файлам между Linux и Windows требует зависимости Samba
- Управление разрешениями файлов Linux, доступ к которым осуществляется через Windows, является сложным
- У гостя Linux, похоже, нет доступа к GPU через Hyper V
Эта проблема может возникнуть из-за того, что по умолчанию коммутаторы Hyper-V рассматриваются как общедоступная сеть; брандмауэр Windows блокирует доступ к виртуальным машинам.
Один простой, но опасный обходной путь - просто отключить брандмауэр Windows. Вы можете сделать это, чтобы проверить, действительно ли это ваша проблема, но, конечно, не оставляйте брандмауэр выключенным.
Лучшее решение - отключить брандмауэр только для сетевого коммутатора (или коммутаторов). Это невозможно сделать в графическом интерфейсе; для этого вам понадобится PowerShell с повышенными привилегиями.
set-NetFirewallProfile -DisabledInterfaceAliases NewInternalVirtualSwitch,DockerNAT,Default
Обратите внимание: если вы хотите отключить брандмауэр для нескольких коммутаторов, вы должны указать их все за один вызов Set-NetFirewallProfile.
Еще лучшим решением было бы переключить коммутаторы на частную сеть, но я не знаю, как это сделать.
Были похожие проблемы здесь (в Windows 10 Home) при попытке запустить Docker вместе с Homestead. Я не могу точно сказать, что сделал трюк, но я закончил с этим:
- В Windows включаются функции:
- Платформа виртуальной машины
- Платформа гипервизора Windows
- Подсистема Windows для Linux
- Использовал HyperVSwitch, чтобы включить еще больше Hyper-V (просто включить его как «функцию Windows» недостаточно!) https://unclassified.software/en/apps/hypervswitch
- Перезагрузите Windows
- В диспетчере VirtualBox отключен «Адаптер 2» для машины Homestead («Настройки»> «Сеть»> «Адаптер 2»> снимите флажок «Включить сетевой адаптер»)
- Запустите машину Homestead как обычно.
Адаптер 2 будет снова включен после перезагрузки компьютера Homestead. Но похоже, что теперь он отлично работает в сочетании со всеми настройками Hyper-V.
Поскольку было много следов, ошибок и перезапусков серверов, я не уверен, что именно помогло, но я надеюсь, что это поможет некоторым людям в их стремлении запустить Docker и Homestead вместе. По крайней мере, теперь я знаю, что это возможно :)