10

I'm currently trying to map my docker container ports from the container to the host (boot2docker). The end goal is to map those ports to my physical machine, but one step at a time.

My Vagrantfile currently looks like:

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

When I run vagrant up app1 --provider=docker the container spins up correctly, however when I do a docker ps I can see that ports have not been mapped.

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

I am using VirtualBox, so I have used it GUI to port forward my physical machines 8080 to the hosts (boot2docker) 8080.

Robert
  • 10,403
  • 14
  • 67
  • 117
Dipesh
  • 1,263
  • 1
  • 11
  • 12
  • can you paste the output of a docker inspect ? – Pak Jun 11 '14 at 09:57
  • possible duplicate of [Forward Ports from boot2docker using the Vagrant Docker provider](http://stackoverflow.com/questions/23948831/forward-ports-from-boot2docker-using-the-vagrant-docker-provider) – till Jun 14 '14 at 23:08
  • Are you using Vagrant 1.6.0 or 1.6.1? It looks like this may have been an issue that was fixed in 1.6.2: https://github.com/mitchellh/vagrant/issues/3723 – Andy Shinn Jun 19 '14 at 01:57

1 Answers1

2

Your configuration should work on Linux, but if you're using a Virtualbox (I assume you're on Mac or Windows), then you want a Vagrantfile for your VM to get it to your host.

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

Let's pretend that's in host-vm/Vagrantfile relative to your current Vagrantfile. So your current Vagrantfile should look like:

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
jchysk
  • 1,538
  • 1
  • 15
  • 27