Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

Docker Tip #35: Connect to a Database Running on Your Docker Host


Once in a while you may want to connect a container to a database or service running on your Docker host. Here's how to do it.

A lot has chanced with Docker since this post was created, Check out this post for an updated solution.

I get it, you might not trust Docker well enough to run your database in a container (with a Docker volume to deal with persistence).

Fortunately you can easily have a container connect to any service that’s installed on your Docker host. This means you could install your database / service directly on your Docker host and then connect to it from a running Docker container.

You can simply connect to your local network IP address.

You can figure out your local network IP address by looking for the IP address that belongs to the same subnet as your router (assuming you’re using one). It’s very likely going to be a 192.x.x.x or 10.x.x.x address.

Find Your Local Network IP Address on MacOS / Linux:

$ ifconfig
eth2      Link encap:Ethernet  HWaddr d0:50:99:4a:e8:68
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::c542:1540:8737:c9cd/64 Scope:Global
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

if ifconfig is unavailable you can also use ip a.

Find Your Local Network IP Address on Windows:

$ ipconfig
Ethernet adapter vEthernet (External Virtual Network):

   Connection-specific DNS Suffix  . : home
   Link-local IPv6 Address . . . . . : fe80::c542:1540:8737:c9cd%11
   IPv4 Address. . . . . . . . . . . :
   Subnet Mask . . . . . . . . . . . :
   Default Gateway . . . . . . . . . :

In my case, my local network IP address is

Testing It Out, Can the Container Reach the Docker Host?

We can test this out without needing to run a database or any service. We’ll just run an Alpine image, drop into a shell, install the ping utility and ping the Docker host.

# Start the Alpine container and drop into a Shell prompt.
docker container run --rm -it alpine sh

# Install the ping utility.
apk update && apk add iputils

# Ping your local network IP address (replace my IP address with yours).

# You should see this output (hit CTRL+C to stop it):
PING ( 56(84) bytes of data.
64 bytes from icmp_seq=1 ttl=37 time=0.539 ms
64 bytes from icmp_seq=2 ttl=37 time=0.417 ms
64 bytes from icmp_seq=3 ttl=37 time=0.661 ms

There you have it, you’ve successfully connected to your Docker host over your local network.

If you were running a database, you would use (in my case) as part of your connection string, and then configure your database to bind on

Keep in mind, if you do this, you may want to restrict the outside world from connecting to it because will allow connections from anywhere. Details on how to do this will depend on what database / service you’re using.

But Nick, What If My Local IP Address Changes?

In development this could happen a lot, but in production not so much. In either case the above way will get the job done but there is a cleaner way to do it.

I think it was necessary to show the previous way of doing it because it demonstrates exactly how it works. Now, let’s use a custom Docker network instead.

Create a custom bridge Docker network:
docker network create -d bridge --subnet --gateway mynet

Feel free to change around the IP addresses and mynet name if you want. In the end, after running this command you’ll be able to access your Docker host by the IP address of regardless of what your real local IP address is.

Confirm it works again, but we’ll use the new network:
# Start the Alpine container, but this time we'll use our custom network.
docker container run --rm -it --net=mynet alpine sh

# Install the ping utility.
apk update && apk add iputils

# Ping the custom IP address we set up.

# You should see this output (hit CTRL+C to stop it):
PING ( 56(84) bytes of data.
64 bytes from icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from icmp_seq=2 ttl=64 time=0.119 ms
64 bytes from icmp_seq=3 ttl=64 time=0.062 ms

Ok, so now we have a legit implementation of connecting to your Docker host over a custom network with a static IP address. Nice!

Plot twist: If you decide to run your own database, I would personally use Docker!

Free Intro to Docker Email Course

Over 5 days you'll get 1 email per day that includes video and text from the premium Dive Into Docker course. By the end of the 5 days you'll have hands on experience using Docker to serve a website.