在 Docker 容器内部和外部运行的应用程序之间的接口

在 Docker 容器内部和外部运行的应用程序之间的接口

我正在运行 Ubuntu 20.04,并使用 Nvidia Riva 自动语音识别应用程序来检测语音命令。我想将它们引导/传输到另一个应用程序中以执行控制操作。我遇到的问题是 ASR 应用程序部署在 docker 容器中,而控制应用程序没有部署。

因此。我想知道在docker容器外运行的应用程序如何与在容器内运行的应用程序交互。

我曾考虑在同一个容器内运行所有内容,但这并不实际,因为我们的产品已经成熟,有很多相互交互的服务,并且还与 Linux 内核驱动程序交互。

在此先感谢您的帮助。

答案1

Docker 容器和主机之间有两个非常明显的接口,您可能应该进一步探索:

  1. 已发布的端口
  2. 绑定挂载(持久存储)
已发布的端口

运行容器时的一个选项是将容器的端口映射到主机。这可用于 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>

相关内容