0

Вот мой Vagrantfile:Как получить доступ к гостевому порту 3000 от хоста?

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
config.vm.box = "ubuntu-14.04-x64" 

# Sync'd folders 
config.vm.synced_folder ".",   "/vagrant", disabled: true 
config.vm.synced_folder "~/work",  "/home/vagrant/work", create: true 
config.vm.synced_folder "~/apt-archives", "/var/cache/apt/archives/", create: true 

# Ubuntu VM 
config.vm.define "ubuntu" do |ubuntu| 
ubuntu.vm.provision "shell", path: "provision.sh", privileged: false 
ubuntu.vm.network "forwarded_port", guest: 3000, host: 8080 # http 
ubuntu.vm.network "private_network", ip: "10.20.30.100" 
ubuntu.vm.hostname = "ubuntu" 

# VirtualBox Specific Stuff 
# https://www.virtualbox.org/manual/ch08.html 
config.vm.provider "virtualbox" do |vb| 

    # Set more RAM 
    vb.customize ["modifyvm", :id, "--memory", "2048"] 

    # More CPU Cores 
    vb.customize ["modifyvm", :id, "--cpus", "2"] 

end # End config.vm.provider virtualbox 
end # End config.vm.define ubuntu 
end 

Например, когда я бегу рельсы приложение использует порт 3000, из гостевой машине я бы доступ к http://localhost:3000.

Но я пытаюсь получить доступ к приложению через браузер хоста.

Ни один из ниже работал:

http://10.20.30.100:8080

https://10.20.30.100:8080

http://10.20.30.100:3000

https://10.20.30.100:3000

браузер на показ хозяина: ERR_CONNECTION_REFUSED

+0

Вы пробовали это http://serverfault.com/questions/516110/vagrant-access-guest-from-host-via-hostname –

+0

Спасибо, но это не сработало для меня. – Askar

ответ

3

Из соображений безопасности Rails 4.2 ограничивает удаленный доступ в режиме разработки. Это делается путем привязки сервера к «localhost», а не к «0.0.0.0» ....

Чтобы получить доступ к Rails, работающим на виртуальной машине (например, созданной Vagrant), вам необходимо изменить IP-адрес Rails по умолчанию привязка к 0.0.0.0.

См. Ответы на следующие StackOverflow Question, предлагается ряд различных подходов.

Идея заключается в том, чтобы Rails работает либо заставляя следующую команду:

rails s -b 0.0.0.0 

Или жестко прописывать связывание в приложение Rails (которое я нашел менее желательно):

# add this to config/boot.rb 
require 'rails/commands/server' 
module Rails 
    class Server 
    def default_options 
     super.merge(Host: '0.0.0.0') 
    end 
    end 
end 

Лично , Я бы, вероятно, пошел с предложением использовать foreman и файл Procfile:

# Procfile in Rails application root 
web:  bundle exec rails s -b 0.0.0.0 

Это позволило бы, я полагаю, лучше упростить синхронность развертывания.