我公司的网络正在使用代理。因此,当我使用 时vagrant up
,它向我显示了 401 权限错误。
如何进行一些设置以使用 vagrant?
安装代理配置:
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"
如果您的代理需要身份验证,最好设置环境变量而不是将密码存储在 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
Installing proxyconf will solve this, but behind a proxy you can't install a plugin simply using the command vagrant plugin install
, Bundler will raise an error.
set your proxy in your environment if you're using a unix like system
export http_proxy=http://user:password@host:port
or get a more detailed answer here: How to use bundler behind a proxy?
after this set up proxyconf
自动检测您的代理设置并将它们注入您的所有 vagrant VM
安装代理插件
vagrant plugin install vagrant-proxyconf
将此conf添加到您的私人/用户 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
现在启动你的虚拟机!
在 Windows 主机上
打开 CMD 提示符;
set HTTP_PROXY=http://proxy.yourcorp.com:80
set HTTPS_PROXY=https://proxy.yourcorp.com:443
将上述代码段中的地址和端口替换为适合您情况的任何内容。以上将保持设置,直到您关闭 CMD 提示。如果它适合您,请考虑将它们永久添加到您的环境变量中,这样您就不必在每次打开新的 CMD 提示时都设置它们。
在 windows 上,您必须设置一个变量来指定代理设置,下载 vagrant-proxyconf 插件:(将 {PROXY_SCHEME}(http:// 或 https://)、{PROXY_IP} 和 {PROXY_PORT} 替换为正确的值)
set http_proxy={PROXY_SCHEME}{PROXY_IP}:{PROXY_PORT}
set https_proxy={PROXY_SCHEME}{PROXY_IP}:{PROXY_PORT}
之后,您可以添加插件以在 vagrant 文件中硬编码您的代理设置
vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org
然后您可以在 Vagrantfile 中提供 config.proxy.xxx 设置以独立于环境设置变量
您将需要安装插件 proxyconf,因为这使得在 VagrantFile 中为来宾机器配置代理非常简单
config.proxy.http = "http://proxy:8888"
config.proxy.https = "http://proxy:8883"
config.proxy.no_proxy = "localhost,127.0.0.1"
但是,仍有很多事情可能出错。首先,您可能无法在代理后面安装 vagrant 插件。如果是这种情况,您应该从 rubygems.org 下载源代码并从源代码安装
$ vagrant plugin install vagrant-proxyconf --plugin-source file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem
如果你解决了这个问题,你可能有幸在 NTLM 代理后面,这意味着如果你在来宾机器上使用 *nix,那么你还有一段路要走,因为 NTLM 身份验证本身不支持有很多方法解决这个问题。我已经使用 CNTLM 来解决难题的一部分。它充当标准授权协议和 NTLM 之间的粘合剂
要完整浏览,请查看有关在公司代理后面设置 vagrant 的博客条目
这个问题没有提到VM Provider,但就我而言,我在同一环境下使用Virtual Box。我需要启用 Virtual Box GUI 中的一个选项才能使其正常工作。位于 Virtual Box 应用首选项中:File >> Preferences... >> Proxy。一旦我配置了这个,我就可以毫无问题地工作。希望这篇小贴士也能帮到大家。
密码中的某些特殊字符会在代理中产生问题。要么转义它们,要么避免密码中包含特殊字符。
如果您确实希望代理配置和插件安装在您的 Vagrantfile 中,例如,如果您只是为您的公司环境制作 Vagrantfile 并且不能让用户编辑环境变量,这就是我的答案:
ENV['http_proxy'] = 'http://proxyhost:proxyport'
ENV['https_proxy'] = 'http://proxyhost:proxyport'
# Plugin installation procedure from http://stackoverflow.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 引用它们。)
在 PowerShell 中,您可以像这样设置http_proxy和https_proxy环境变量:
$env:http_proxy="http://proxy:3128"
$env:https_proxy="http://proxy:3128"
在 MS Windows 中,这对我们有用:
set http_proxy=< proxy_url >
set https_proxy=< proxy_url >
*nix 的等价物:
export http_proxy=< proxy_url >
export https_proxy=< proxy_url >