如何将docker py容器发送到stdin?

如何将docker py容器发送到stdin?,docker,dockerpy,Docker,Dockerpy,考虑到这个shell示例: echo "hello" | docker run --rm -ti -a stdin busybox \ /bin/sh -c "cat - >/out" 这将执行一个busybox容器,并创建一个新的文件/out,其内容为hello 我如何使用docker py实现这一点? docker py等效物: container = docker_client.create_container( 'busybox',

考虑到这个shell示例:

echo "hello" | docker run --rm -ti  -a stdin busybox \
    /bin/sh -c "cat - >/out"
这将执行一个busybox容器,并创建一个新的文件
/out
,其内容为
hello

我如何使用docker py实现这一点?

docker py
等效物:

container = docker_client.create_container( 'busybox',
                                            stdin_open = True,
                                            command    = 'sh -c "cat - >/out"'
                                            )
docker_client.start( container )

stdin\u open=True
,但我在哪里写

当时,无法将stdin连接到运行的容器。这已经改变了

对于docker py的当前版本,这在某种程度上是可能的(也称为slix的解决方法)。这是从一个关于python 2.7的讨论中得出的

请参见python 3中docker py版本3.1.1的示例

导入docker,tarfile
从io导入字节io
def test_通过_stdin_将_数据_发送到_容器()
client=docker.APIClient()
#创建容器
container=client.create\u容器(
"百事通",,
标准开放=正确,
命令='sh-c“cat->/received.txt')
client.start(容器)
#将stdin连接到容器并发送数据
original_text_to_send='您好,这是从另一边来的'
s=client.attach_套接字(容器,参数={'stdin':1,'stream':1})
s、 发送(原始文本到发送编码('utf-8'))
s、 关闭()
#停止容器并从测试文件收集数据
client.stop(容器)
client.wait(容器)
原始\u流,状态=client.get\u存档(容器'/received.txt')
tar_archive=BytesIO(b''。加入((原始_流中的i代表i)))
t=tarfile.open(mode='r:',fileobj=tar\u存档)
text_from_container_file=t.extractfile('received.txt').read().decode('utf-8'))
客户端。移除容器(容器)
#检查是否相等
断言文本\u从\u容器\u文件==原始\u文本\u发送到\u
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
测试\u通过\u stdin\u将\u数据\u发送到\u容器()

这里有一个更新的解决方案:

#/usr/bin/env python
进口码头工人
#连接到docker
client=docker.APIClient()
#创建一个容器
container=docker\u client.create\u container(
"百事通",,
标准开放=正确,
命令='sh-c“cat->/out')
client.start(容器)
#连接至容器标准DIN插座
s=client.attach_套接字(容器,参数={'stdin':1,'stream':1})
#发送文本
s、 发送('你好')
#关闭、停止并断开
s、 关闭()
client.stop(容器)
client.wait(容器)
客户端。移除容器(容器)

这仍然是真的吗?我更新了答案。实际上,现在有一种方法可以将stdin放入容器中。
attach\u socket
返回的对象没有
send
方法。也许你的意思是
s.\u sock.send