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

问题描述 投票:0回答:13

我公司的网络正在使用代理。所以当我使用

vagrant up
时,它显示了 401 权限错误。

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

proxy vagrant http-proxy
13个回答
107
投票

安装proxyconf:

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"

99
投票

如果您的代理需要身份验证,最好设置环境变量,而不是将密码存储在 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 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

53
投票

安装 proxyconf 可以解决这个问题,但在代理后面,你无法仅使用命令

vagrant plugin install
安装插件,Bundler 会引发错误。

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

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

或在这里获得更详细的答案:如何在代理后面使用捆绑器?

在此设置proxyconf之后


29
投票

自动检测您的代理设置并将其注入到您的所有 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

现在启动你的虚拟机!


11
投票

在 Windows 主机上

打开CMD提示符;

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

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


9
投票

在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 设置,使其独立于环境设置变量


6
投票

您需要安装插件 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


2
投票

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


1
投票

如果你确实希望你的代理配置和插件安装在你的 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 引用它们。)


1
投票

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


1
投票

在 PowerShell 中,您可以设置 http_proxyhttps_proxy 环境变量,如下所示:

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

0
投票

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

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

以及 *nix 的等效项:

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

0
投票

或添加到 Vagrantfile 中

  node.vm.provision "shell", inline:  <<-SHELL
  # Set HTTP proxy
  export http_proxy=http://jamal.mahmoudi:[email protected]:808
  export https_proxy=http://jamal.mahmoudi:[email protected]:808

  # Set no proxy for specific addresses (optional)
  export no_proxy="localhost,127.0.0.1"
  sed -i 's/nameserver.*/nameserver 185.51.200.2/' /etc/resolv.conf

  # Update package manager cache (if required)
  sudo apt update   # For Debian/Ubuntu
  # Or sudo yum makecache  # For CentOS/RHEL

  # Additional commands to configure applications with proxy settings if needed
SHELL
© www.soinside.com 2019 - 2024. All rights reserved.