从容器连接到主机服务的示例

2023-12-30

我是 Docker 和无人机编程的新手。我能够将 python 脚本(包含 Dronekit 代码)部署到 Windows 10 上的 docker 容器。要运行该脚本,我需要连接到主机上的服务。我在下面提供了一个片段,Windows 有一个正在运行的程序(Mavproxy SITL),它暴露了 127.0.0.1:14550,这是 UDP。我的图像应该连接到这个地址。

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)

我阅读了有关 host.docker.internal 的文档和回复:https://docs.docker.com/docker-for-windows/networking/ https://docs.docker.com/docker-for-windows/networking/ 如何从docker容器访问主机端口 https://stackoverflow.com/questions/31324981/how-to-access-host-port-from-docker-container/43541732#43541732

对类似问题的答复指出,在 Windows/Mac 版本 18.03+ 上使用 host.docker.internal。

我的问题是“如何使用”host.docker.internal?是在docker run命令中传入的吗?您能给我分享一个如何使用它的例子吗? 使用host.docker.internal是否允许py脚本访问主机的UDP 127.0.0.1:14550地址?


您正在寻找的端点是'http://host.docker.internal'.

在 MacO 上运行。我将在我的 macbook 上运行一个服务,只需在 python:3.6 容器上使用基本 Flask,并在根目录中添加 app.py:

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)

然后在另一个容器中运行

import requests

r = requests.get('http://host.docker.internal:5000')

r.json()
{'a': 1, 'b': 2}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从容器连接到主机服务的示例 的相关文章

随机推荐