Example to connect from container to host service

I am new to Docker and Drone Programming. I was able to deploy a python script (that contains dronekit code) to docker container on my Windows 10. To run the script, I need to connect to a service on my host. I have provided a snippet below, Windows has a program running(Mavproxy SITL) which has exposed 127.0.0.1:14550 which is UDP. My image should connect to this address.

mydronectrlscript.py:

from dronekit import connect

# Connect to UDP endpoint.
vehicle = connect(‘udp:127.0.0.1:14550’, wait_ready=True)
# Use returned Vehicle object to query device state - e.g. to get the mode:
print(“Mode: %s” % vehicle.mode.name)

I read documents and responses about host.docker.internal: https://docs.docker.com/docker-for-windows/networking/ How to access host port from docker container

Responses to similar question states to use host.docker.internal on Windows/Mac for version 18.03+.

My questions is "how to use" host.docker.internal? Is it passed in the docker run command? Can you please share me an example of how is it used? Will the use of host.docker.internal allow py script to access host’s UDP 127.0.0.1:14550 address ?

1 answer

  • answered 2019-07-18 18:51 C.Nivs

    The endpoint you're looking for is 'http://host.docker.internal'.

    Running on MacOs. I will run a service on my macbook just using basic flask on a python:3.6 container with app.py in the root directory:

    docker run -it -p 5000:5000 python:3.6 bash
    
    pip install flask
    
    python app.py
    
    # app.py
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/', methods=["GET"])
    def main():
        return {'a': 1, 'b': 2}
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0', port=5000, debug=True)
    

    Then just running in another container

    import requests
    
    r = requests.get('http://host.docker.internal:5000')
    
    r.json()
    {'a': 1, 'b': 2}