I have mysql running on my localhost I can connect it by running:
mysql -h 127.0.0.1 -P 3306 -u root -p
I also ran docker container with command:
docker run -tid -v $(pwd):/code -p 3306:3306 -p 5000:5000 --name container container
And I want to access my Mysql db from docker container. So I also type from docker container:
mysql -h 127.0.0.1 -P 3306 -u root -p
But it gives me error:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
What am I doing wrong? Ports seems to be correct.
EDIT 1
Output of ifconfig
in docker:
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1780 errors:0 dropped:0 overruns:0 frame:0
TX packets:977 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2225781 (2.2 MB) TX bytes:56572 (56.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:1400 (1.4 KB) TX bytes:1400 (1.4 KB)
Here are the steps you can follow to install the Dockerhub MySQL Container: Step 1: Pull the Docker Image for MySQL. Step 2: Deploy and Start the MySQL Container. Step 3: Connect with the Docker MySQL Container.
You just need to reference it by its Docker network IP, instead of localhost or 127.0. 0.1 . Your host's Docker IP will be shown on the inet line. Connect to this IP address from within your containers to successfully access the services running on your host.
Even if you configure MySQL to listen on all interfaces, and then from your container access MySQL from a non-loopback IP, you may find that Docker’s routing, NAT, and firewall rules do not allow you to access services running on the host. The fast workaround for this is to run your container on the host network stack with:
docker run -tid -v $(pwd):/code -p 3306:3306 -p 5000:5000 \
--name container --net host container
You can also also move MySQL inside a container running on the same Docker network, and then access it via the container name using Docker’s DNS service discovery.
Use the default route. For example:
~# ip route show | grep "default" | awk '{print $3}'
172.18.0.1
then
mysql -h 172.18.0.1 -P 3306 -u root -p
if you need to automate that, let's say, use that IP on a shell script, send it to a shell script, take it as:
host=$(ip route show | grep \"default\" | awk '{print $3}' | xargs echo -n)
then you have the host ip addr on $host
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With