$ dockerrun -it --rm -p 8888:8080 tomcat:8.0
This expose tomcat on port 8888 on the host and maps it to port 8080 in the container. So you should be able to just navigate to “http://localhost:8888” in the browser but on Mac you’ll end up with this instead:
Since docker is running in VirtualBox on Mac we need to forward a port to the docker-machine VM as well. There are many different ways to do this but I think they are all a bit cumbersome to remember. For this reason I created a small bash script to make it easier to remember how to do port forwarding.
The name of this bash script is
pf (which stands for port forward). It allows you to create a port mapping as easily as this (after you’ve started the docker container):
$ pf 8080
This forwards port 8080 in the container to port 8080 on the host in the docker-machine environment name
default by opening an SSH connection to VirtualBox in the background .
If you run into this error:
Hostdoesnot exist: "default"
you’ll need to specify the name of your docker-machine environment. For example:
$ pf 8080 -e dev
This will use the
dev docker-machine environment.
But what if you want to use a different port on the host? Just do:
$ pf 8888:8080
This will map port
8888 on the host to
8080 in the container.
Stopping the port forwarding
If you’ve started port forwarding in the background (default) you can easily stop it using:
$ pf 8080 -s
8080 is the host port. You can also do:
$ pf 8888:8080 -s
8888 would be enough. Note that there’s also no need to specify the environment when stopping the port forwarding (using
Running in Foreground
There may be cases where you’d rather want to run the “port forwarding process” in the foreground. This is also very easy, just add
$ pf 8080 -f
If you do this you’ll see the docker-machine console and once it’s shutdown the port forwarding is also stopped automatically (i.e. no need to run
pf 8080 -s ).
This script makes it easy to remember how to do port forwarding with docker-machine on Mac. There are more options available in the script and if you want to know more just run:
$ pf -h
Note that if you need more advanced options just use the vanilla
docker-machine command. The purpose of
pf is to make it really easy to do the most basic things. Don’t forget to visit the github page if you find this useful.