我正在运行 Ubuntu 20.04,并使用 Nvidia Riva 自动语音识别应用程序来检测语音命令。我想将它们引导/传输到另一个应用程序中以执行控制操作。我遇到的问题是 ASR 应用程序部署在 docker 容器中,而控制应用程序没有部署。
因此。我想知道在docker容器外运行的应用程序如何与在容器内运行的应用程序交互。
我曾考虑在同一个容器内运行所有内容,但这并不实际,因为我们的产品已经成熟,有很多相互交互的服务,并且还与 Linux 内核驱动程序交互。
在此先感谢您的帮助。
答案1
Docker 容器和主机之间有两个非常明显的接口,您可能应该进一步探索:
- 已发布的端口
- 绑定挂载(持久存储)
已发布的端口
运行容器时的一个选项是将容器的端口映射到主机。这可用于 Web 界面等,也可用于通过 TCP 或 UDP 端口映射交换其他数据。
要在容器和主机之间映射端口,请使用-p
以下语法下列语法:
docker run -p <host-port>:<container-port> <IMAGE>
示例:您想将80
容器中的 TCP 端口映射到8080
主机上的端口(这/tcp
是可选的,因为它是默认的)。
docker run -p 8080:80/tcp <IMAGE>
绑定坐骑
另一个选择是使用绑定挂载在主机文件系统和容器之间映射文件。这些文件是实时映射的,因此容器中发生的任何更新都应立即反映在文件系统中。
要在容器和主机之间映射文件,请使用-v
以下语法下列语法:
docker run -v /path/on/host:/path/in/container <IMAGE>
/data
示例:您想将容器中的路径映射到home/user/data
主机上的路径。
docker run -v /home/user/data:/data <IMAGE>
请注意,还可以对单个文件进行额外的映射:
docker run -v /home/user/data:/data -v /usr/local/etc/container.conf:/etc/container.conf <IMAGE>