我正在内部装有2个docker容器的情况下运行Vagrant,当不在公司代理上时,它运行良好,但是当我在公司代理上并尝试运行vagrant时,我不断得到:
https://index.docker.io/v1/repositories/dockerfile/ubuntu/images:
dial tcp: lookup index.docker.io: no such host
我在使用vagrant的内部设置了代理
VAGRANT_HTTP_PROXY="http://proxy.example.com:8080/" vagrant up
我也无法通过公司代理上的vagrant使用
nslookup
解析主机我尝试将以下内容作为建议的here包含在vagrantfile中:
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
我也尝试过使用桥接连接,按照here的建议重新启动docker服务器,并在Mac上交换我的DNS(我在其他地方看到了建议,但找不到链接)
我真的很感谢您的帮助/指导,以防万一,我正在运行带有虚拟盒的OSX 10.9的Macbook上运行vargrant 1.6.5,这是我的流浪汉文件:
$start = <<SCRIPT
#service docker stop
#HTTP_PROXY=http://proxy:8080/ docker -d &
service docker restart
#stop and remove any existing containers
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
echo "Building from Dockerfiles"
# Build containers from Dockerfiles
docker build -t sapvagrant/web_app /var/local/app/webApp
docker build -t sapvagrant/node /var/local/app/nodeService
echo "Running & linking containers"
# Run and link the containers
docker run -d --name node myvagrant/node
docker run -d -P -p 49166:80 --name web --link node:db myvagrant/web_app
docker start node
docker start web
SCRIPT
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure("2") do |config|
=begin
if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://proxy:8080/"
config.proxy.https = "http://proxy:8080/"
config.proxy.no_proxy = "localhost,127.0.0.1"
end
=end
#config.vm.network :bridged
config.vm.provider :virtualbox do |vb|
#vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
#vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
# Port Forwarding
config.vm.network "forwarded_port", guest: 49166, host: 3000
# Ubuntu
config.vm.box = "precise64"
config.vm.box_url="http://files.vagrantup.com/precise64.box"
# Install latest docker
config.vm.provision "docker"
config.vm.synced_folder ".", "/var/local/app" #, type: "nfs"
config.vm.provision :shell, inline: "/etc/init.d/docker restart"
#config.vm.provision "shell", inline: $setup
config.vm.provision "shell", run: "always", inline: $start
end
最佳答案
不必在Internet上解析名称,因为您的代理服务器可以解析名称。但是,如果未安装docker,则vagrant-proxyconf不会配置代理。您有2种方法可以解决此问题。
在配置Docker之前配置代理
Vagrant docker provisioner无法更改配置文件。 (例如/etc/default/docker
,/etc/sysconfig/docker
)
您需要先配置代理,然后再使用Shell Provisioner进行配置,如下所示。
# If you use RHEL write to /etc/sysconfig/docker
config_proxy = 'echo export http_proxy=$http_proxy >> /etc/default/docker'
config.vm.provision('shell',
inline: config_proxy)
config.vm.provision 'docker'
我简化了您的
Vagrantfile
。VAGRANTFILE_API_VERSION = '2'
Vagrant.configure('2') do |config|
if Vagrant.has_plugin?('vagrant-proxyconf')
config.proxy.http = 'http://proxy:8080/'
config.proxy.https = 'http://proxy:8080/'
config.proxy.no_proxy = 'localhost,127.0.0.1'
end
config.vm.synced_folder '.', '/var/local/app'
# Ubuntu
config.vm.box = 'precise64'
config.vm.box_url = 'http://files.vagrantup.com/precise64.box'
# If you use RHEL write to /etc/sysconfig/docker
config_proxy = 'echo export http_proxy=$http_proxy >> /etc/default/docker'
config.vm.provision('shell',
inline: config_proxy)
config.vm.provision 'docker' do |d|
d.build_image '/var/local/app/webApp', args: '-t sapvagrant/web_app'
d.build_image '/var/local/app/nodeService', args: '-t sapvagrant/node'
d.run 'sapvagrant/node', args: '--name node'
d.run 'sapvagrant/web_app', args: '-P -p 49166:80 --name web --link node:db'
end
end
使用docker安装的VM框
如果未安装docker,则Vagrant-proxyconf不配置代理。如果使用docker安装的VM框,则Vagrant-proxyconf配置代理。
您可以在ATLAS上找到docker安装的VM框。我找到了jess / ubuntu-precise-nginx-docker。
我简化了您的
Vagrantfile
。VAGRANTFILE_API_VERSION = '2'
Vagrant.configure('2') do |config|
if Vagrant.has_plugin?('vagrant-proxyconf')
config.proxy.http = 'http://proxy:8080/'
config.proxy.https = 'http://proxy:8080/'
config.proxy.no_proxy = 'localhost,127.0.0.1'
end
config.vm.synced_folder '.', '/var/local/app'
# Ubuntu
config.vm.box = 'jess/ubuntu-precise-nginx-docker'
config.vm.provision 'docker' do |d|
d.build_image '/var/local/app/webApp', args: '-t sapvagrant/web_app'
d.build_image '/var/local/app/nodeService', args: '-t sapvagrant/node'
d.run 'sapvagrant/node', args: '--name node'
d.run 'sapvagrant/web_app', args: '-P -p 49166:80 --name web --link node:db'
end
end