pythondockerdrone.iotelemetrydronekit

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 ?


Solution

  • Simply, response to my question is:

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

    Also, from what I tried this does not work if you are using Windows 10 Home edition or a version of OS that needs virtual box. This worked on Windows 10 Professional and Mac OS.

    Since this question is related to drone programming: If you are eventually trying to access COM ports (for telemetry), it is not possible at the moment with Docker image hosted in Windows OS: https://github.com/docker/for-win/issues/1018

    It is possible from Linux based on what I read: Docker - a way to give access to a host USB or serial device?