Виртуальная машина с Vagrant недоступна для клиента с первого раза

Я пытаюсь запустить проект Rails, используя Nginx с докером и бродягой. Все в порядке, если я использую vagrant box ubuntu/trusty64, я подготавливаю виртуальную машину, и все в порядке. Но я хотел создать свою коробку из ubuntu/trusty64 и тут-то и начались все мои проблемы.

Поэтому я создал коробку с помощью упаковщика и этого шаблона:

{
      "variables": {
        "home": "{{env `HOME`}}"
      },
      "provisioners": [
        {
          "type": "shell",
          "execute_command": "echo 'vagrant'|sudo -S sh '{{.Path}}'",
          "override": {
            "virtualbox-ovf": {
              "scripts": [
                "scripts/docker.sh",
                "scripts/ansible.sh",
                "scripts/cleanup.sh",
                "scripts/zerodisk.sh"
              ]
            }
          }
        }
      ],
      "post-processors": [
        {
          "type": "vagrant",
          "override": {
            "virtualbox": {
              "output": "ubuntu-14-04-x64-virtualbox.box"
            }
          }
        }
      ],
      "builders": [
        {
          "type": "virtualbox-ovf",
          "headless": "true",
          "boot_wait": "10s",
          "source_path": "{{user `home`}}/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/14.04/virtualbox/box.ovf",
          "ssh_username": "vagrant",
          "ssh_password": "vagrant",
          "ssh_port": 22,
          "ssh_wait_timeout": "10000s",
          "shutdown_command": "echo 'shutdown -P now' > /tmp/shutdown.sh; echo 'vagrant'|sudo -S sh '/tmp/shutdown.sh'",
          "vboxmanage": [
            [ "modifyvm", "{{.Name}}", "--memory", "512" ],
            [ "modifyvm", "{{.Name}}", "--cpus", "1" ]
          ]
        }
      ]
    }

Затем добавил ящик в pedrof/base-box в бродячих ящиках и использовал этот Vagrantfile для запуска виртуальной машины:

Vagrant.configure(2) do |config|
  config.vm.provider 'virtualbox' do |v|
    v.memory = 2048
    v.cpus = 2
  end

  config.vm.box = 'pedrof/base-box'
  config.vm.synced_folder '.', '/vagrant', type: 'nfs', mount_options: ['nolock,vers=3,udp,noatime,actimeo=1']
  config.vm.network :private_network, ip: '172.17.8.100'
  config.vm.provision 'shell', path: "docker/build.sh"
  config.vm.provision 'shell', path: "docker/init.sh", run: 'always'
end

Он запускает виртуальную машину и запускает контейнеры Docker с помощью docker-compose. Все в порядке, за исключением того, что я не могу получить доступ к http://172.17.8.100 из браузера, но ping отвечает нормально из хозяин. Я запустил curl, чтобы поразить Nginx изнутри виртуальной машины, и он ответил правильной индексной страницей, но ничего извне виртуальной машины. Странно то, что все работает нормально, если я перезагружаю vagrant с помощью vagrant reload.

Я неправильно строю коробку? Чего-то не хватает в Vagrantfile?


person Peter    schedule 15.07.2015    source источник
comment
Когда вы закручиваетесь внутри виртуальной машины, вы используете новый интерфейс/IP или локальный хост?   -  person Sneal    schedule 16.07.2015


Ответы (1)


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

Итак, сначала ваш порт контейнера должен быть сопоставлен с портом коробки. Это делается с помощью параметра Docker -p. Пример: -p 8080:8080. Тогда порт будет доступен внутри коробки. Вы говорите, что можете получить доступ внутрь коробки, так что я думаю, что это уже правильно настроено.

Попробуйте пробросить этот порт из коробки. Добавьте это в свой Vagrantfile

...
config.vm.network "forwarded_port", guest: 8080, host: 8080
...

Теперь попробуйте получить доступ к порту 8080 с помощью http://localhost:8080.

Если вы хотите, чтобы http://172.17.8.100 работал, вам нужно сопоставить порт контейнера с портом 80 box порт, который требует root-доступа.

person blacklabelops    schedule 16.07.2015