【问题标题】:Attach stdout of one docker container to stdin of another docker container将一个 docker 容器的标准输出附加到另一个 docker 容器的标准输入
【发布时间】:2018-05-14 08:03:50
【问题描述】:

我想将容器 A 中脚本的标准输出通过管道传输到容器 B 的标准输入,然后将容器 B 的标准输出通过管道传输到容器 C 的标准输入。我想知道这样做的最佳实践是什么。

选项 1

docker run -it ImageA python script1.py | docker run -it ImageB python script2.py |  \ 
docker run -it Image3 python script3.py

选项 2

使用共享卷来存储可供后续容器访问的数据。

docker run -it -v /home/shared_volume:/container1_home/shared_volume python script1.py 

docker run -it -v /home/shared_volume:/container2_home/shared_volume python script2.py 

docker run -it -v /home/shared_volume:/container3_home/shared_volume python script3.py 

理想情况下,我宁愿不使用共享卷。 script1.py 和 script2.py 的输出产生大约几 TB 的中间文件(或数据流)。我对这些文件不感兴趣,我宁愿只将 script3.py 的结果存储到磁盘。

【问题讨论】:

    标签: python-2.7 docker stdout stdin docker-volume


    【解决方案1】:

    你可以通过不带 -t 选项运行它来尝试同样的方法吗?我能够像下面那样做一个示例,它正在工作

    $docker run -i ubuntu:xenial ls -l | docker run -i ubuntu:xenial wc -l
    $20
    

    【讨论】:

    • 感谢您的回答。我知道 docker 容器之间的管道会做我想要的。当要流式传输的数据非常大(~ TB)时,您认为这是最佳做法还是有更好的解决方案?
    • 我希望我的回答对您有用并回答您的第二个问题。我建议您使用 Kafka 或 RabbitMQ Docker 并编写您的程序来充当生产者(stdout)和订阅者(​​stdin);当您想使用数据并查看 docker 之间的数据发生了什么情况时,这将帮助您进行调试。此外,如果您不想将数据存储在卷中或不使用管道选项,那么这种方法是不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多