- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
From inside of a Docker container, how do I connect to the localhost of the machine
Suppose you have an Nginx web server running inside an Nginx container in your host machine. And you have a MySQL database running in your host machine. Now, you want to access the MySQL server in your host machine from the Nginx container. Also, the MySQL is running on your localhost and the host machine does not expose any port to the outside world. Hence, we can conclude that MySQL is bound to be run on localhost only and not accessible to the outside world because it is not bound on the IP address.
In this article, we will explain the different ways through which you can access the MySQL running on your localhost or any other program in your host machine from the container.
To sum up in a short discussion, if you are on Docker for Windows or Mac, you can simply connect to MySQL using host.docker.internal instead of 127.0.0.1. If you started your Docker container in your local Linux machine using --add-host host.docker.internal:host-gateway option, you can even use the host.docker.internal string in your connection in your Linux host.
Now, let’s discuss the solutions in detail.
Solution 1.
A simple solution to this in a Linux machine is to use the --network=”host” option along with the Docker run command. After that, the localhost (127.0.0.1) in your Docker container will point to the host Linux machine.This runs a Docker container with the settings of the network set to host.
This container will share the network with the host machine and the container’s localhost will point to the host machine. Please note that any port exposed from your Docker container is now opened in your host machine and that too without having to use the publish options.
You can verify this by listing the IP address using the following commands.
In your local machine -
$ ip addr show eth0
And while running the container -
$ docker run -it --network=host ubuntu:latest ip addr show eth0
On executing these commands, you will find that both the container and the host machine have the same IP address and share the same network stack.
Solution 2.
If you are using a Mac host, you can use -
HOSTNAME= docker.for.mac.host.internal
Or
HOSTNAME = docker.for.mac.localhost
in your Docker run command. And then you can use -
mysql -uroot -hdocker.for.mac.localhost
inside your Docker container to access MySQL running in your host.
Solution 3.
You can also access the MySQL service running in your host machine in your Docker container using the bridge network mode. For that, you need to ensure that the MySQL service is actively listening for all the connections in the 172.17.42.1 address. You can include the bind-address = 172.17.42.1 in your MySQL config file.
In host mode, you can use -
bind-address = 127.0.0.1 in your MySQL config file and then, you can connect to localhost from your containers.
$ docker run --rm -it --network=host mysql mysql -h 127.0.0.1 -uroot -p
To sum up, these are the various ways through which you can easily connect to a MySQL service running inside your host machine from a Docker container. In a gist, you can use the --network=host to bind the localhost with your Docker container and they access the MySQL service inside your container using the hostname “127.0.0.1”. Depending on whether you are using a Mac, Windows, or Linux host machine, you can choose the best possible solution that caters to your own requirements.
- Related Articles
- Copy Files from Docker Container to Local Machine
- How to run a command inside Docker Container?
- Mounting a volume inside docker container
- Installing Linux Packages Inside a Docker Container
- How do I get into a Docker container's shell?
- Working with Java inside Docker Container
- How do I run a command on an already existing Docker container?
- How to edit a file after I shell to a Docker container?
- How is Docker different from a Virtual Machine?
- How to copy files from host to Docker container?
- How to get a Docker container's IP address from the host?
- Copying files from Docker container to Host
- How does spring boot connect localhost MySQL
- How to get a Docker Container IP address?
- How to backup and restore a Docker Container?
