I wrote a blog post a while back about how I was running Acme Air in docker along with Cassandra. This setup has become far more complex and I wanted to stop doing port mapping specifically for every container. Here are the simple steps to get all the ports and ip's to route cleanly from a hosting system (Mac OS X, but windows works the same). to all of your docker containers.
So my setup is:
- Docker runs a separate Docker host (small footprint Linux VM) on Mac which is different from main machine. So any port which maps to container to host machine, cannot be accessed by localhost. Instead it has to use docker host is. Here is how you can get docker host ip on Mac ## docker-machine ip vmname $ docker-machine ip default.
- I have a docker project that uses the MAC address for hardware license enforcement. I cannot change this, the ISV uses a hardware fingerprint that includes the MAC address. I am trying to create a macvlan network, that will use the physical adapter and get an IP address from my network DHCP server, alternatively I will assign a static IP.
Getting started provides an overview of Docker Desktop on Mac, basic Docker command examples, how to get help or give feedback, and links to other topics about Docker Desktop on Mac. Troubleshooting describes common problems, workarounds, how to run and submit diagnostics, and submit issues. FAQs provide answers to frequently asked questions. The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server. I wanted to run Tomcat Docker on a Windows host, only to find out that I cannot access the management interface. By default, it is only accessible from localhost as a security measure.
- Macbook Pro laptop running Mac OS X 10.9.2
- VirtualBox 4.3.10
- Boot2docker 0.8.0
- Docker 0.10.0
To help understand the concept I'll communicate with a 'server' on a container that is listening on a TCP port. To demonstrate, I'll use the netcat tool listening on port 3333 on a base ubuntu image. The goal is to be able to telnet directly to that port from my base laptop. Using netcat is just an example. Once this works any server listening on any port should be just as easy to access.
To help understand the below terminal sessions, my laptop's hostname is 'ispyker', my docker vm running on VirtualBox's hostname is 'boot2docker' and containers usually have hostnames like 'e79e432696f7'.
First, let's go ahead and run the netcat/unbuntu container:
Now, on another Mac OS terminal:
Ok, so let's fix this ...
First, we need to open up the VirtualBox application from finder. From the menu, select:
VirtualBox->Preferences->Network->Host-only Networks
Either edit an existing or create a network called 'vboxnet0' with the following settings:
Under adapter:
IPv4 Address: 172.16.0.1
IPv4 Network Mask: 255.255.0.0
IPv6 Address: (blank)
IPv6 Network Mask: 0
Under DHCP server:
Uncheck 'Enable Server'
Next, right click the 'boot2docker-vm' and select:
Settings->Network
Create an Adapter 2 with the following settings:
Check Enable Network Adapter
Attached to: Host-only Adapter
Name: vboxnet0
Advanced:
Adapter Type: Intel Pro/1000 MT Desktop
Promiscuous Mode: DenyMac
Address: (use the default)
Enable Cable Connected
Save all your settings and let's start back up that netcat/ubuntu container:
We still at this point won't be able to 'see' this port from MacOS, as we haven't yet assigned an IP address to the boot2docker VM nor have we created a route from MacOS to the docker host-only network.
Let's test that to be sure:
First, let's add an IP address to the host-only network for this new interface on the boot2docker VM:
Docker For Mac Get Ip Download
At this point, you should be able to ping your boot2docker VM on it's new ip address from your Mac:Docker Mac Get Vm Ip
However, you still can't get to the netcat container port:
Now, we'll add the route to the hosting Mac OS:
Docker For Mac Get Ip Camera
If you followed along correctly, and typed 'hello container world' once telnet connects, 'hello container world' should have been printed out in your ubuntu/netcat container. At this point you should be able to access any container's ip address and ports. You can get the IP address of any container by running docker inspect [containername] looking for it's 172.17.0.x address.
Welcome to your easier local host-only fully TCP accessible cloud.
Thanks to Takahiro Inaba for helping put this together.