For some circumstances we cannot use mysql inside docker by sharing volume and we need to use mysql outside docker under the same machine, the big question here is: once you use mysql as daemon on MAC OS and we need have access from docker: which is localhost? localhost inside docker or localhost on my own machine? I haven't found any documentation taking about this so far. I hope this help and forget about bridge connections, sharing volumes, link, or another crazy stuff. Enjoy!
- Temporally create an mysql root account that allow external connection (a root account with a password).
- Verify the range of mysql IP used by the container services (see the example Image1) - try to make a connection from the container.
- Modify your docker-compose.yml by including
docker.for.mac.localhost
as your mysql domain (this is the only way to connect something from the container to your localhost machine on MAC OS). - Delete your mysql root account or modifying this by allowing only the docker connections (Maybe there is a better solution for this.)
update user set host='172.18.0.%' where host='%' and User='root'
or even:
update user set host='172.18.%.%' where host='%' and User='root'
- I believe the same procedure is applicable to postgres.
- Go to the top of this page and click on the Star button or write a comment on the bottom of the page.
In MacOS and Windoze the
host.docker.internal
works out-of-the-box or new versions of Docker.But in Linux, the
host.docker.internal
does not work ! (it's strange - Docker is internally Linux from the beginning). But you can add host given you are sure the IP Address of it (usuallydocker0
interface).$ ip -4 addr show scope global dev docker0 | grep inet | awk '{print $2}' | cut -d / -f 1
If you use bridge, the default IP would work (like 192.168.1.x, not 172.17.0.x)
$ route | awk '/^default/ { print $2 }'
or
$ ip route | awk 'NR==1 {print $3}'
Then you can build a script to add
docker.host.local
to/etc/hosts
Linux, or even using the docker run parameters--add-host
-Duc