我有一个运行在容器A中的应用程序,我想写一个在容器B中运行的进程的stdin。我看到,如果我想从主机上写到B的stdin,我可以使用{{1 }}。实际上,我想从docker attach
内致电docker attach B
。
理想情况下,我希望能够通过A
进行配置。也许我可以告诉docker-compose创建一个unix域套接字docker-compose.yml
,该套接字通过管道传输到A
的stdin,或者将一些魔术端口号连接到B
的stdin。
我意识到,如果有必要,我总是可以在B
的容器中放置一个小型Web服务器,该服务器将所有输入从B
的开放端口重定向到该进程,但我宁愿使用开箱即用的解决方案(如果存在)。
对于对此细节感兴趣的人,我有一个从容器A运行的python应用程序,我希望它与容器B中的鳕鱼(象棋引擎)对话。
答案 0 :(得分:1)
一个Docker容器中的进程无法直接使用另一个容器的stdin / stdout / stderr。这是容器“类似于VM”的一种方式。请注意,在没有父子进程关系的普通Linux / Unix中,这也是几乎不可能的。
正如您所说,最好的方法是将HTTP或其他服务放在另一个容器中的进程的前面,或者仅使用单个容器并启动仅通过stdin作为子进程进行通信的事物。 / p>
(如果您给调用进程授予对主机的Docker套接字的访问权限,可能有一种方法可以使这项工作正常进行,但是您可以为它赋予对主机的不受限制的访问权限,并将实现与Docker绑定; HTTP或子进程在没有Docker的情况下,这些路径很容易开发和测试,然后分别移入容器区域,并且不涉及接管主机的可能性。)
答案 1 :(得分:0)
如果有帮助,您可以尝试创建并读写套接字。 并将此套接字安装在两个容器中,例如:
docker run -d -v /var/run/app.sock:/var/run/app.sock:ro someapp1
docker run -d -v /var/run/app.sock:/var/run/app.sock someapp2
免责声明:这只是个主意,我自己从未做过类似的事情