fnichol / dvm

An on demand Docker virtual machine, thanks to Vagrant and boot2docker. Works great on Macs and other platforms that don't natively support the Docker daemon. Support VirtualBox, VMware, and Parallels.
http://fnichol.github.io/dvm
Apache License 2.0
457 stars 67 forks source link

need a section on port forwarding in instructions #10

Closed corporate-gadfly closed 10 years ago

corporate-gadfly commented 10 years ago

Instructions about port forwarding should be added.

Typical scenario:

Container Ports -> Docker Host Ports

dvm scenario:

Container Ports -> Docker Host Ports (on Virtualbox) -> Docker Client Ports (on OSX)

The Vagrantfile does not setup any forwarded ports.

So, if you are using dvm and you want to browse to a network port from your OSX browser (e.g., 8080), then unless a forwarded port is setup manually in Virtualbox or by the Vagrantfile (not done at the moment), the connection will be refused from OSX.

Another caveat is that ports < 1024 cannot be forwarded. You can get around it by using ipfw but I haven't looked into it.

amaltson commented 10 years ago

Indeed, dvm is really cool but without port forwarding I can't access any of the running docker images from OS X.

drnic commented 10 years ago

Perhaps it'd be nice to manage these via the dvm client. dvm add-port 5000 would update the internal Vagrantfile and run vagrant reload.

amaltson commented 10 years ago

:+1: to @drnic's idea, I like it.

lalyos commented 10 years ago

My workaround to access any port used by a container (even the ones not forwarded) is to use good old ssh as a socks proxy.

detailed description is here : http://lalyos.github.io/blog/2013/10/06/access-docker-containers-via-internal-ip/

drewcrawford commented 10 years ago

IMHO dvm should be assigned a private network address. That way all ports are reachable on the private network without having to manage any forwarding. Only 1 LOC.

fnichol commented 10 years ago

There isn't really a need for Vagrant port forwarding in this project, or at least that wasn't the initial goal. While boot2docker is kickass awesome, it currently forwards the Docker daemon port (TCP/4243) back to your localhost. In other words docker -h tcp://127.0.0.1:4243.

The driving need I had for something like dvm was for running infrastructure testing, like Test Kitchen using the kitchen-docker driver. For the driver to work we needed access to all the dynamically assigned ports, not just the Docker daemon port. That's why it uses a private network segment and address (192.168.42.43 by default). Once Docker supported the DOCKER_HOST environment variable, the actual IP address was less important and consequently makes the docker command on non-Linux distros feel almost native.

Additionally, I wanted something slightly more convenient than cd <some-vagrant-project-dir>; vagrant up every time I needed "dockers". dvm is a glorified shell wrapper around a slightly crazy Vagrantfile and passes most of its commands, magic, and awesome directly down to Vagrant.

Does that help clear up the confusion a little?

fnichol commented 10 years ago

Hopefully the commit above in the README helps to clarify things a bit better for future new users. Thanks all!

stevepereira commented 10 years ago

I think I'm missing something that could keep me from dvm - is there a possibility I could have a docker container port (for a webserver) available to my host mac @ localhost:8080 for instance using dvm? Do people do this with some other mechanism? Is 'export FORWARD_DOCKER_PORTS=1' related? I feel very noob asking, but I haven't been able to figure this out...