docker-py:容器标准输入和标准输出

问题描述

我正在尝试使用 docker-py 创建运行容器化应用程序,我需要将输入数据写入其 STDIN,并从其 STDOUT 中读取。基本上是这种工作流程

echo "hello" | docker run -i --rm busyBox sh -c "cat -"

但是在 Python 中。简而言之,我已经尝试了为 STDIN 部分描述的 here 和为 STDOUT 部分描述的 attached another socket 方法。但它并没有像我希望的那样工作......这是一个最小的例子:

docker_test.py

#!/usr/bin/env python

import docker

client = docker.DockerClient()
container = client.containers.run(
    auto_remove=True,command="cat -",detach=True,image="busyBox",stdin_open=True,)

# Writing to stdin
input_socket = container.attach_socket(
    params={
        "stdin":True,"stream":True,},)
with open("test.txt") as file:
    input_socket._sock.send(file.readline().encode("utf-8"))

# Reading from stdout
output_socket = container.attach_socket(
    params={
        "stdout":True,"logs":True,)
for line in output_socket:
    print(line.decode())

假人test.txt

1
2
3
4

和执行的结果:

$ ./docker_test.py                                                                                                             
1 


如你所见,它只输出测试文件的第一行,然后是一堆换行符,然后挂起。有时,它根本不输出任何内容,但无论哪种情况,它都不会退出

我该如何正确执行此操作?任何帮助将不胜感激。

提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...