【问题标题】:Connection Reset when port forwarding with Vagrant使用 Vagrant 进行端口转发时连接重置
【发布时间】:2013-08-10 00:04:58
【问题描述】:

我有运行 Ubuntu 12.04 LTS 操作系统的 Vagrant/VirtualBox。我已将 Vagrant 配置为将访客端口 8000 转发到我的主机端口 8888。

[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 8000 => 8888 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use! 

当虚拟机启动时,我在端口 8000 上启动了一个 Django 开发服务器。

Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

好的,我可以把它放在后台,我什至可以curl localhost:8000 并从服务器获取一些输出

<div id="explanation">
  <p>
    You're seeing this message because you have <code>DEBUG = True</code> in your
    Django settings file and you haven't configured any URLs. Get to work!
  </p>
</div>

但是当我尝试使用 Firefox/Chrome/Telnet 从我的主机访问服务器时,我遇到了 Connection Reset/Connection Lost/ERR_CONNECTION_RESET 等问题。

首先我认为这可能是一些 iptables 的东西,但事实证明 Ubuntu 默认允许一切。我还关闭了主机上的防火墙。我怎样才能找到这个问题的根源?

【问题讨论】:

    标签: django ubuntu-12.04 vagrant portforwarding connection-reset


    【解决方案1】:

    我让 Django 监听 127.0.0.1:8000(默认)

    正如米切尔在这里的回答中所解释的那样:Vagrant's port forwarding not working 我应该一直在听 0.0.0.0。这是他回答的引述:

    我想补充一点,这通常是由 VM 中的服务器,因为它绑定到 127.0.0.1,即环回。 您需要确保服务器绑定到 0.0.0.0 以便 所有接口都可以访问。

    如果您使用的是 Django,您希望像这样启动开发服务器:./manage.py runserver 0.0.0.0:8000

    【讨论】:

    • 如果您使用的是 Rails,并且碰巧看到了这篇 Django 帖子,那么您对应的 rails 选项是 rails -b 0.0.0.0
    • 你刚刚震撼了我的世界好友 :)
    【解决方案2】:

    1)。项目必须以python manage.py runserver 0.0.0.0:8000 运行。
    如果这不能解决您的问题,那么

    2)。打开你的 Vagrantfile 并在后面添加
    config.vm.network "forwarded_port", guest: 8000, host: 8001 这个
    # config.vm.network "forwarded_port", guest: 80, host: 8080线

    在我的情况下这项工作;)

    注意:运行vagrant up时提供此转发端口信息
    ....
    ==&gt; default: Forwarding ports...

    default: 8000 =&gt; 8001 (adapter 1)
    default: 22 =&gt; 2222 (adapter 1)

    【讨论】:

      【解决方案3】:

      另一种解决方案是将ssh tunneling 与vagrant 一起使用。 打开终端并cd 进入您的Vagrantfile 所在的目录。 假设您的 vm 已启动并正在运行 (vagrant up),请执行以下命令。

      # save vagrant ssh config to a file named `vagrant-ssh-config`
      vagrant ssh-config > vagrant-ssh-config
      

      然后将客人的8000端口转发给主机。

      ssh -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default
      

      现在只需打开浏览器并检查127.0.0.1:8000

      请注意,前面的命令也会在 ssh 服务器上打开一个 shell。如果你想在 ssh 服务器上打开没有 shell 的 ssh 隧道,请添加 -N

      ssh -N -L 8000:127.0.0.1:8000 -F vagrant-ssh-config default
      

      更新:2019 年 10 月 4 日

      更简单的端口转发解决方案

      vagrant ssh -- -N -L 8000:127.0.0.1:8000
      

      在 Vagrant 2.0.2 上测试,但也可能适用于旧版本。

      【讨论】:

        【解决方案4】:

        添加到@GrvTyagi 的答案。

        我正在使用 ubuntu:“hashicorp/bionic64”

        我的流浪档案

        Vagrant.configure(2) do |config|
          config.vm.box = "hashicorp/bionic64"
          #Ubuntu 18.04
          config.vm.box_check_update = false
          config.vm.network "forwarded_port", guest: 8081, host: 8080
            config.vm.provider "virtualbox" do |vb|
              vb.gui = false
              vb.cpus = 2
              vb.memory = "4096"
            end
          
          config.vm.provision "shell", inline: <<-SHELL
          # your script to execute while provision the server goes here
          SHELL
        
        end
        

        由于某些原因,官方文档建议的默认端口 (80) 不起作用。所以下面的配置不起作用:

        config.vm.network "forwarded_port", guest: 80, host: 8080
        

        通过运行一个简单的服务器来测试你的端口转发

        python3 -m http.server 8081
        

        你应该可以使用命令从主机连接它

        curl http://localhost:8080/ --trace-ascii dump.txt
        

        成功后,强制在主机 0.0.0.0 和端口 8081 上运行您的应用程序 在 localhost 上运行将不起作用。

        yourappserver --bindhost 0.0.0.0 -bindport 8081
        

        你应该能够通过主机连接它

        http://0.0.0.0:8080
        

        【讨论】:

          猜你喜欢
          • 2018-12-22
          • 1970-01-01
          • 2014-06-17
          • 2023-04-03
          • 2017-11-22
          • 1970-01-01
          • 1970-01-01
          • 2016-01-13
          • 1970-01-01
          相关资源
          最近更新 更多