Почему я не могу разрешить docker.io и другие хосты за прокси-сервером из Vagrant VM

Я использую Vagrant с двумя док-контейнерами внутри, и он отлично работает, когда я не на корпоративном прокси-сервере, но когда я нахожусь на корпоративном прокси-сервере и пытаюсь запустить бродягу, я продолжаю получать:

https://index.docker.io/v1/repositories/dockerfile/ubuntu/images: 
dial tcp: lookup index.docker.io: no such host

У меня есть прокси-сервер внутри бродяги, используя

VAGRANT_HTTP_PROXY="http://proxy.example.com:8080/" vagrant up

Я также не могу заставить его разрешать хосты, используя nslookup внутри vagrant на корпоративном прокси-сервере.

Я попытался включить в vagrantfile следующее, как было предложено здесь :

config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end

Я также попытался использовать мостовое соединение, перезапустив сервер докеров, как было предложено здесь и подкачка моего DNS на моем Mac (что я видел, предлагалось где-то еще, но не могу найти ссылку)

Я был бы очень признателен за помощь/направление, и в случае, если это относится к делу, я запускаю vargrant 1.6.5 на macbook под управлением OSX 10.9 с виртуальной коробкой, и это мой бродячий файл:

$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

person jonnie    schedule 31.10.2014    source источник
comment
@chris-snow, я не понимаю, что вы на самом деле редактировали   -  person jonnie    schedule 02.11.2014
comment
Я добавил подсветку синтаксиса в блоки кода.   -  person Chris Snow    schedule 02.11.2014


Ответы (1)


Нет необходимости разрешать имена в Интернете, потому что ваш прокси-сервер разрешает имена. Но vagrant-proxyconf не настраивает прокси, если докер не установлен. У вас есть 2 способа решить эту проблему.

Настройте прокси перед предоставлением докера

программист Vagrant docker не может изменить файл конфигурации. (например, /etc/default/docker, /etc/sysconfig/docker) Вам необходимо настроить прокси перед инициализацией с помощью средства подготовки оболочки следующим образом.

  # 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

Использовать установленную докером виртуальную машину

Vagrant-proxyconf не настраивает прокси, если докер не установлен. Vagrant-proxyconf настройте прокси-сервер, если вы используете виртуальную машину с установленным докером.

  • Note:
    • Vagrant-proxyconf 1.4.0 restarts docker always, so sometimes docker containers can be broken.
    • Vagrant-proxyconf 1.4.2 (не выпущен 22 декабря 2014 г.) перезапускает докер только при изменении конфигурации прокси.

Вы можете найти виртуальные машины, установленные в докере, в ATLAS. Я нашел 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
person otahi    schedule 21.12.2014