Hi i’m trying to communicate with mongodb in the host from a flask container…
So using “docker.host.internal” on the URI didn’t work (host machine is Ubuntu)
Any suggestions ?? To solve this
You can run your flask container using the host networking mode. This way docker won't isolate the container and will run it the same network namespace as the host, and you container will be able to discover your database using
localhost as mongodb hostname
docker run --network host <flask-image>
From the point of view of your MongoDB instance and your Flask app they're running on separate servers, so the steps to make the former visible to the latter are the same as if they were running on two different physical servers.
Check if the servers are on the same LAN - they are (docker bridge network).
Find if MongoDB is configured to listen on all network interfaces. If not either configure it to do so or to listen on the interface that is connected to the LAN both servers have in common.
If you haven't already, find what IP your MongoDB server has on the common LAN and set Flask app to use it to connect to the database.
Optionally, if your MongoDB server has a firewall, make sure that whatever port MongoDB is listening on is not blocked.
You can add an alias IP address to the loopback interface on the host to get a consistent address to use from your containers.
Any private address you won't see on the local or container networks, something like 10.8.8.8
/etc/network/interfaces.d/lo for a permanent address after reboot
iface lo inet loopback
iface lo inet static
or to temporarily test
ip address add 10.8.8.8/32 dev lo