Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker容器之间通信的最佳实践_Docker_Websocket_Communication_Volume - Fatal编程技术网

docker容器之间通信的最佳实践

docker容器之间通信的最佳实践,docker,websocket,communication,volume,Docker,Websocket,Communication,Volume,我的应用程序中有两个容器在Raspberry pi上运行。一个容器是python容器,它接收来自I/O设备的零星输入。另一个容器正在运行Electron JS。我的问题是,将python容器从I/O设备接收的数据推送到Electron JS应用程序的最佳方式是什么?我正在写共享卷和使用websocket在两个容器之间通信,但不知道哪种方式更好,为什么更好。标准做法是使用网络连接;您提到了WebSocket,但普通HTTP连接工作得很好,并且更易于管理 这方面的设置相当简单。对设置有合理的描述,即

我的应用程序中有两个容器在Raspberry pi上运行。一个容器是python容器,它接收来自I/O设备的零星输入。另一个容器正在运行Electron JS。我的问题是,将python容器从I/O设备接收的数据推送到Electron JS应用程序的最佳方式是什么?我正在写共享卷和使用websocket在两个容器之间通信,但不知道哪种方式更好,为什么更好。

标准做法是使用网络连接;您提到了WebSocket,但普通HTTP连接工作得很好,并且更易于管理

这方面的设置相当简单。对设置有合理的描述,即使您没有使用Compose:安排Docker网络存在(Compose会自动执行此操作),然后另一个容器的名称(Compose服务名称,
Docker run--name
)可用作主机名。如果您使用的是Compose,则根本不需要进行任何设置,一个简单的docker Compose.yml将起作用:

版本:“3”
服务:
容器-a:
建造:a
集装箱-b:
建造:b
如果不使用Compose,则需要手动创建网络,大致如下所示

docker网络创建一些网络
docker run--net一些net--name container-a。。。
docker run--net一些net--name container-b。。。
在这两种情况下,在这两个容器中,
container-a
container-b
是解析到相应容器的有效主机名


我不会在这里尝试使用共享文件系统或Unix套接字。共享卷设置更复杂,需要一些额外的设置来确保权限正确;TCP网络没有。它还附带了一个硬性要求,即两个容器位于同一个物理节点上,并且只有一台服务器。如果您希望使用Docker Swarm或Kubernetes等群集环境,同样的TCP/HTTP网络机制也可以工作(尽管设置可能非常不同),但群集环境可以提供负载平衡器,以便您可以拥有服务器的多个副本,而且没有特别要求服务器和客户机是同一位置的。

您能解释一下如何使用websocket在两个容器之间进行通信吗?您是否在同一网络中创建了两个容器?Docker卷将是一个更好的主意,因为您不会依赖于网络。是的,两个容器位于同一网络上,在同一设备上,运行在一个名为balena的物联网平台上,该平台很容易设置共享卷。当Electron应用程序返回不同的html页面时,套接字连接继续关闭,我在网络上遇到了困难。这也可能是因为我对js不太熟悉,并且没有正确地实现它。我想我想知道的是,在编程上坚持使用卷的更简单的方法是否比联网更不优雅,我是否应该花时间来弄清楚它,或者如果这很重要如果你想在容器之间共享数据,最好的办法是尽可能使用卷,在这种情况下,网络不重要在同一个网络中使用两个容器进行测试,我无法从另一个容器ping一个。名称解析失败