Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to map docker ports using vagrant 1.6 and the docker provider

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.

like image 271
Dipesh Avatar asked May 07 '14 23:05

Dipesh


1 Answers

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
like image 64
jchysk Avatar answered Oct 22 '22 02:10

jchysk