Как сопоставить порты докеров с использованием vagrant 1.6 и поставщика докеров

В настоящее время я пытаюсь сопоставить порты контейнера докеров с контейнером на хост (boot2docker). Конечной целью является сопоставление этих портов с моей физической машиной, но один шаг за раз.

В настоящее время мой Vagrantfile выглядит так:

Vagrant.configure("2") do |config|

    config.vm.define "app1" do |a|
        a.vm.provider "docker" do |d|
            d.build_dir = "dockers/app1"
            d.name = "app1"
            d.ports << "8080:8080"
            d.ports << "8443:8443"
            d.volumes << "/vagrant/data/app1:/var/app1"
        end
    end

    config.vm.define "app2" do |a|
        a.vm.provider "docker" do |d|
            d.build_dir = "dockers/app2"
            d.name = "app2"
            d.ports << "8081:8081"
            d.link("app1:app1")
        end
    end
end

Когда я запускаю vagrant up app1 --provider=docker, контейнер вращается правильно, однако, когда я делаю докер ps, я вижу, что порты не были сопоставлены.

0.0.0.0:2222->22/tcp, 8080/tcp, 8443/tcp

Я использую VirtualBox, поэтому я использовал его GUI для перенаправления моих физических машин 8080 на хосты (boot2docker) 8080.

Ответ 1

Ваша конфигурация должна работать на Linux, но если вы используете Virtualbox (я предполагаю, что вы на Mac или Windows), то вам нужен Vagrantfile для вашей виртуальной машины, чтобы получить его на ваш хост.

Vagrant.configure("2") do |config|

  config.vm.box = "busybox"
  config.vm.provider "virtualbox" do |v|
    v.memory = 768
    v.cpus = 2
  end

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

end

Предположим, что в host-vm/Vagrantfile относительно вашего текущего Vagrantfile. Итак, ваш текущий Vagrantfile должен выглядеть так:

Vagrant.configure("2") do |config|

    config.vm.define "app1" do |a|
        a.vm.provider "docker" do |d|
            d.vagrant_vagrantfile = "host-vm/Vagrantfile"
            d.build_dir = "dockers/app1"
            d.name = "app1"
            d.ports = ["8080:8080"]
            d.ports = ["8443:8443"]
            d.create_args = ["-v", "/vagrant/data/app1:/var/app1"]
        end
    end

    config.vm.define "app2" do |a|
        a.vm.provider "docker" do |d|
            d.vagrant_vagrantfile = "host-vm/Vagrantfile"
            d.build_dir = "dockers/app2"
            d.name = "app2"
            d.ports = ["8081:8081"]
            d.link("app1:app1")
        end
    end
end