如何在代理环境中使用 vagrant?

     2023-02-15     225

关键词:

【中文标题】如何在代理环境中使用 vagrant?【英文标题】:How to use vagrant in a proxy environment? 【发布时间】:2013-11-21 06:17:02 【问题描述】:

我公司的网络正在使用代理。所以当我使用vagrant up时,它显示了一个401权限错误。

如何进行一些设置以使用 vagrant?

【问题讨论】:

你用谷歌搜索过这个吗? 对不起,我没有。现在我知道vagrant plugin install vagrant-proxyconf 但是在我安装并将代理 url 设置为配置文件后,结果是一样的。401 【参考方案1】:

安装代理配置:

vagrant plugin install vagrant-proxyconf

配置你的 Vagrantfile:

config.proxy.http     = "http://yourproxy:8080"
config.proxy.https    = "http://yourproxy:8080"
config.proxy.no_proxy = "localhost,127.0.0.1"

【讨论】:

config.env_proxy.* 自 2.0 版起已弃用,已被 config.proxy.* 取代。 config.proxy.https = "https://yourproxy:8080" 是第二行的httpshttp 可能两者兼有。在我的公司中,http 和 https 通过 http 中的相同代理 好的,当我运行“vagrant plugin install vagrant-proxyconf”时,它会命中我的代理? 只提一件事,如果你在代理后面,你就不能安装插件。【参考方案2】:

如果您的代理需要身份验证,最好设置环境变量而不是将密码存储在 Vagrantfile 中。 此外,您的 Vagrantfile 可以被不在代理后面的其他人轻松使用。

适用于 Mac/Linux(在 Bash 中)

export http_proxy="http://user:password@host:port"
export https_proxy="http://user:password@host:port"
vagrant plugin install vagrant-proxyconf

然后

export VAGRANT_HTTP_PROXY=$http_proxy
export VAGRANT_HTTPS_PROXY=$https_proxy
export VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

对于 Windows,使用 set 而不是 export。

set http_proxy=http://user:password@host:port
set https_proxy=https://user:password@host:port
vagrant plugin install vagrant-proxyconf

然后

set VAGRANT_HTTP_PROXY=%http_proxy%
set VAGRANT_HTTPS_PROXY=%https_proxy%
set VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

【讨论】:

另外,如果您不希望它留在您的环境中,您可以仅在一个命令上为该环境变量执行 VAGRANT_HTTP_PROXY="user:password@host:port" vagrant up(不导出或设置)。 很好的解决方案,因为它不需要将代理设置放在显然不属于它们的 Vagrantfile 中 Windows Powersehell v6.0: $env:http_proxy="user:password@host:port" $env:https_proxy="user:password@host:port" vagrant plugin install vagrant-proxyconf 对于那些使用 Windows Git Bash 的用户,请使用 Mac/Linux (in Bash) 指令。例如:export http_proxy="user:password@host:port" 您在 Mac/Linux 说明中忘记 (?) export VAGRANT_HTTPS_PROXY=$https_proxy【参考方案3】:

安装 proxyconf 可以解决这个问题,但是在代理后面你不能简单地使用命令vagrant plugin install 安装插件,Bundler 会报错。

如果您使用的是类似 unix 的系统,请在您的环境中设置您的代理

export http_proxy=http://user:password@host:port

或在此处获得更详细的答案:How to use bundler behind a proxy?

在此之后设置代理配置

【讨论】:

在 Windows 上,我按照您的建议进行了操作,但使用了“SET”而不是“export”。无需对 Vagrantfile 进行任何更改即可按预期工作。【参考方案4】:

自动检测您的代理设置并将它们注入您的所有 vagrant VM

安装代理插件

vagrant plugin install vagrant-proxyconf

将此配置添加到您的私有/用户 VagrantFile(它将为您的所有项目执行):

vi $HOME/.vagrant.d/Vagrantfile

Vagrant.configure("2") do |config|
  puts "proxyconf..."
  if Vagrant.has_plugin?("vagrant-proxyconf")
    puts "find proxyconf plugin !"
    if ENV["http_proxy"]
      puts "http_proxy: " + ENV["http_proxy"]
      config.proxy.http     = ENV["http_proxy"]
    end
    if ENV["https_proxy"]
      puts "https_proxy: " + ENV["https_proxy"]
      config.proxy.https    = ENV["https_proxy"]
    end
    if ENV["no_proxy"]
      config.proxy.no_proxy = ENV["no_proxy"]
    end
  end
end

现在启动你的虚拟机!

【讨论】:

我喜欢这个答案,因为它重用了我已经在主机操作系统上声明的现有 HTTP_PROXY 环境变量。剪切粘贴死亡! 看起来不错。离开代理时禁用它怎么办?发现 vagrant 插件在多个地方打了guest linux,以使各种不同的工具/应用程序工作。有没有简单的禁用方法?这样至少也可以从命令行标志翻转,并且单个vagrant reload 将修复,并且最好在连接到新网络时自动检测代理设置输入/输出,并提醒用户或使其无缝工作. tmatilai.github.io/vagrant-proxyconf 提到禁用,但不确定它是否解决了这些问题。 不确定但这个 sn-p 测试 http_proxy env var 的存在以设置代理插件。如果您不使用 *_proxy 环境,它应该是“未激活”(?)【参考方案5】:

在 Windows 主机上

打开 CMD 提示符;

set HTTP_PROXY=http://proxy.yourcorp.com:80
set HTTPS_PROXY=https://proxy.yourcorp.com:443

将上述 sn-ps 中的地址和端口替换为适合您情况的任何内容。以上将保持设置,直到您关闭 CMD 提示。如果它适合您,请考虑将它们永久添加到您的环境变量中,这样您就不必在每次打开新的 CMD 提示符时都设置它们。

【讨论】:

【参考方案6】:

在windows上,你必须设置一个变量来指定代理设置,下载vagrant-proxyconf插件:(替换PROXY_SCHEME(http://或https://),PROXY_IP和 PROXY_PORT 由正确的值)

set http_proxy=PROXY_SCHEMEPROXY_IP:PROXY_PORT
set https_proxy=PROXY_SCHEMEPROXY_IP:PROXY_PORT

之后,您可以添加插件以在 vagrant 文件中硬编码您的代理设置

vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org

然后您可以在 Vagrantfile 中提供 config.proxy.xxx 设置以独立于环境设置变量

【讨论】:

只是一个附加参数(从 https 到 http 的 ruby​​gem),以避免在验证 SSL 证书时出错:vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.orgsrc 这比以前的解决方案更好,因为这个不需要其他任何东西。其他解决方案(安装插件)需要先设置免费互联网访问才能这样做。【参考方案7】:

您将需要安装插件 proxyconf,因为这使得在 VagrantFile 中为访客机器配置代理非常简单

config.proxy.http     = "http://proxy:8888"
config.proxy.https    = "http://proxy:8883"
config.proxy.no_proxy = "localhost,127.0.0.1"

但是,仍有不少事情可能出错。 首先,您可能无法在代理后面安装 vagrant 插件。如果是这种情况,您应该下载源代码,例如来自 ruby​​gems.org 并从源代码安装

$ vagrant plugin install vagrant-proxyconf --plugin-source file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem

如果你解决了这个问题,你可能会幸运地使用 NTLM 代理,这意味着如果你在来宾计算机上使用 *nix,那么你还有一段路要走,因为 NTLM 身份验证本身不受支持 有很多方法可以解决这个问题。我已经使用 CNTLM 来解决难题的一部分。它充当标准授权协议和 NTLM 之间的粘合剂

如需全面了解,请查看 this blog entry 关于在公司代理后面设置 vagrant

【讨论】:

我很想知道为什么这被否决了。它解释了如何解决问题以及如何解决您可能遇到的其他潜在问题 这不是已经多次提供的几乎相同的答案吗?此外,它没有说明如果您是公司代理,如何获取 vagrant 插件,它只是说明这将是一个问题,然后链接到其他地方。 现在看起来应该是vagrant plugin install file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem。 Source 使用plugin-source 从本地 GEM 安装的好主意,但我还没有设法在 Windows 上运行它。我不确定我的语法是否错误,比如file://C:/path1/path2/vagrant-proxyconf-1.5.2.gem?我也尝试过@Martin 上面提到的方法,这也不起作用,因为在这种情况下它仍在尝试联系 ruby​​gems 这对我有用:vagrant plugin install C:/folder1/folder2/vagrant-proxyconf-1.5.2.gem --plugin-clean-sources 密钥是 --plugin-clean-sources 这导致它不会尝试访问 ruby​​gems【参考方案8】:

问题没有提到 VM Provider,但就我而言,我在同一环境下使用 Virtual Box。我需要启用 Virtual Box GUI 中的一个选项才能使其正常工作。位于 Virtual Box 应用首选项中:文件 >> 首选项... >> 代理。一旦我配置了这个,我就可以毫无问题地工作。希望这篇小贴士也能帮到大家。

【讨论】:

【参考方案9】:

如果您确实希望代理配置和插件安装在您的 Vagrantfile 中,例如,如果您只是为您的公司环境制作 Vagrantfile 并且不能让用户编辑环境变量,这就是我的答案:

ENV['http_proxy']  = 'http://proxyhost:proxyport'
ENV['https_proxy'] = 'http://proxyhost:proxyport'

# Plugin installation procedure from http://***.com/a/28801317
required_plugins = %w(vagrant-proxyconf)

plugins_to_install = required_plugins.select  |plugin| not Vagrant.has_plugin? plugin 
if not plugins_to_install.empty?
  puts "Installing plugins: #plugins_to_install.join(' ')"
  if system "vagrant plugin install #plugins_to_install.join(' ')"
    exec "vagrant #ARGV.join(' ')"
  else
    abort "Installation of one or more plugins has failed. Aborting."
  end
end

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.proxy.http     = "#ENV['http_proxy']"
  config.proxy.https    = "#ENV['https_proxy']"
  config.proxy.no_proxy = "localhost,127.0.0.1"
  # and so on

(如果不这样做,只需将它们设置为环境变量,就像其他答案所说的那样,并在 config.proxy.http(s) 指令中从 env 中引用它们。)

【讨论】:

【参考方案10】:

密码中的一些特殊字符会在代理中产生问题。要么转义它们,要么避免密码中包含特殊字符。

【讨论】:

【参考方案11】:

在 PowerShell 中,您可以像这样设置 http_proxyhttps_proxy 环境变量:

$env:http_proxy="http://proxy:3128"
$env:https_proxy="http://proxy:3128"

【讨论】:

【参考方案12】:

在 MS Windows 中,这对我们有用:

set http_proxy=< proxy_url >
set https_proxy=< proxy_url >

和 *nix 的等价物:

export http_proxy=< proxy_url >
export https_proxy=< proxy_url >

【讨论】:

使用 vagrant 在桌面环境下运行虚拟机

】使用vagrant在桌面环境下运行虚拟机【英文标题】:Usingvagranttorunvirtualmachineswithdesktopenvironment【发布时间】:2013-09-2313:26:45【问题描述】:我公司的开发环境是基于虚拟机的,运行在VirtualBox上。我们想更进一步,使用Vagrant的功... 查看详情

windows下vagrant的安装使用

vagrant是简便虚拟机操作的一个软件,而使用虚拟机是为了开发环境与生产环境一致(很多开发环境为windows而生产环境为linux),不至于出现在开发环境正常而移步到正式生产环境时出现各种问题,vagrant通过共享文件,可以实现... 查看详情

如何在 vagrant 中使用 ssh-key 和密码?

】如何在vagrant中使用ssh-key和密码?【英文标题】:howtousessh-keyinvagrantwithpassphrase?【发布时间】:2015-11-0522:55:01【问题描述】:我已经为libvirt创建了我的自定义框,并为vagrant生成了ssh-key对,而无需pass-phrase。我在vagrant文件中提... 查看详情

用vagrant创建jenkinsmaster-slave多机环境

  在上一篇文章中,我们讲到了如何创建自己的vagrantbox。本文中,我们将使用Vagrant一次性创建3台虚拟机以组成一个Jenkins的master-slave构建环境,其中包含1台Jenkinsmaster机器,2台slave机器。我们将采用Shell作为provision工具,... 查看详情

vagrant使用小结

vagrant使用小结最近公司用了vagrant的虚拟镜像服务,感觉挺不错的.在此仅记录使用方法.优点:我们可以通过Vagrant封装一个Linux的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却... 查看详情

如何拥有一个自己的vagrantbox

这是一个关于Vagrant的学习系列,包含如下文章:Vagrant入门创建自己的Vagrantbox用Vagrant搭建Jenkins构建环境用Vagrant和Ansible搭建持续交付平台在上一篇中,我们讲到了Vagrant的基本使用,在本文中我们将尝试创建自己的Vagrantbox。本文... 查看详情

使用vagrant和ansible

...两个工具配合的很好.这个指南会叙述如何同时配合使用Vagrant和Ansible.如果你对Vagrant还不了解,你应该看看这个文档 thedocumentation.假设你已经安装了Ansible,在Git上检测,运行的也很好, 查看详情

vagrant里面不能运行docker,怎么回事

 以下内容均出自Vagrant作者(MitchellHashimoto)与Docker作者(SolomonHykes)在stackoverflow上面一个问题讨论。在这个问题中,双方阐述了vagrant和docker的特点和使用范围,对于深入理解vagrant和docker很有意义,因此笔者翻译出来,以供大家讨... 查看详情

如何设置 PyCharm 在 Vagrant/VirtualBox 远程解释器配置中使用 virtualenv?

】如何设置PyCharm在Vagrant/VirtualBox远程解释器配置中使用virtualenv?【英文标题】:HowtosetupPyCharmtousevirtualenvinVagrant/VirtualBoxremoteinterpreterconfiguration?【发布时间】:2015-01-0316:37:42【问题描述】:在Windows下运行的PyCharm。在VirtualBox下... 查看详情

使用vagrant搭载lamp环境遇到的一系列问题

...(我用来搭建lamp),而且我又有点系统洁癖,决定搭载vagrant来玩玩。        如何搭载在网上一搜一大把,我就不重复了,我的是vagrant2+ubuntu/trusty64+virtualbox有需要的同学戳下:      https://segmentfault.com/a/11900000... 查看详情

确定安装了哪些netframework版本

 以下内容均出自Vagrant作者(MitchellHashimoto)与Docker作者(SolomonHykes)在stackoverflow上面一个问题讨论。在这个问题中,双方阐述了vagrant和docker的特点和使用范围,对于深入理解vagrant和docker很有意义,因此笔者翻译出来,以供大家讨... 查看详情

使用vagrant打造跨平台开发环境

Vagrant 是一款用来构建虚拟开发环境的工具,非常适合php/python/ruby/java这类语言开发web应用我们可以通过Vagrant封装一个Linux的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却... 查看详情

如何在生产环境中代理 Vue.js 中的 URL 调用?

】如何在生产环境中代理Vue.js中的URL调用?【英文标题】:HowtoproxyURLcallinVue.jsinproduction?【发布时间】:2019-03-1805:43:08【问题描述】:在Dev中,我有我的本地vue.js项目和一个开发服务器。我遵循了这个指南:http://vuejs-templates.githu... 查看详情

如何从本地 VirtualBox / Vagrant 开发环境部署到生产环境?

】如何从本地VirtualBox/Vagrant开发环境部署到生产环境?【英文标题】:HowisdeploymenttoProductiondonefromlocalVirtualBox/Vagrantdevelopmentenvironment?【发布时间】:2014-08-0218:04:51【问题描述】:最近我开始阅读有关使用虚拟化软件构建开发环境... 查看详情

我应该使用 Vagrant 还是 Docker 来创建隔离环境? [关闭]

】我应该使用Vagrant还是Docker来创建隔离环境?[关闭]【英文标题】:ShouldIuseVagrantorDockerforcreatinganisolatedenvironment?[closed]【发布时间】:2013-05-1420:47:40【问题描述】:我使用Ubuntu进行开发和部署,并且需要创建一个隔离的环境。为... 查看详情

使用virtualbox+vagrant打造统一的开发环境(代码片段)

...支持多个平台,请根据自己的情况选择对应的版本。安装VagrantV 查看详情

如何在 Windows 10 上将代理配置到 GitBash 环境中

】如何在Windows10上将代理配置到GitBash环境中【英文标题】:HowtoconfigureaproxyintoGitBashenvironmentonwindows10【发布时间】:2019-09-0312:11:10【问题描述】:我在Windows10上安装了Python3.7.3,但由于我公司的Internet代理,我无法在Gitbash(GitSCM)... 查看详情

Vagrant 和 symfony2

】Vagrant和symfony2【英文标题】:Vagrantandsymfony2【发布时间】:2013-08-0411:54:30【问题描述】:我遇到了一个与在vagrant环境中安装Symfony2相关的奇怪问题。该环境已正确设置,并且正在运行一个Web服务器,该服务器正在从与vagrant环... 查看详情