如何使用python docker API在启用TLS的docker中写入stdin?

如何使用python docker API在启用TLS的docker中写入stdin?,docker,Docker,我使用的是一个基于TLS的docker,它使用的是python API 我想写入标准输入(stdin),类似于: echo ls | docker run --rm -i gliderlabs/alpine sh 如何做到这一点?必须获取底层套接字,并调用相应的方法sendall和recv,如下所示 #需要先启动容器,不能直接启动shell #因为method“run”不支持返回套接字 #还需要分离它,否则容器将同步等待命令结束 #调用“sleep”是可行的,它实际上是好的,因为这意味着如果出

我使用的是一个基于TLS的docker,它使用的是python API

我想写入标准输入(stdin),类似于:

echo ls | docker run --rm -i gliderlabs/alpine sh

如何做到这一点?

必须获取底层套接字,并调用相应的方法
sendall
recv
,如下所示

#需要先启动容器,不能直接启动shell
#因为method“run”不支持返回套接字
#还需要分离它,否则容器将同步等待命令结束
#调用“sleep”是可行的,它实际上是好的,因为这意味着如果出现问题,容器将超时
container=client.containers.run(“gliderlabs/alpine”,command=“sleep 100”,detach=True)
#现在我们称之为贝壳
#请注意,我们没有设置tty=True,否则将获得shell邀请
socket=container.exec\u run(cmd=“sh”,stdin=True,socket=True)
#我们设置了超时,以便以后不会被阻塞读取
socket.socket.settimeout(1)
#请注意,os.write不起作用
#因为它不进行TLS加密
#必须改用“sendall”
socket.sendall(b“ls\n”)
#发送后的读取块
尝试:
未知字节=socket.recv(1)
而1:
#请注意,os.read不起作用
#因为它不需要TLS解密
#但返回低级加密数据
#必须改用“socket.recv”
数据=socket.recv(16384)
如果没有数据:中断
打印(数据解码('utf8'))
除此之外。超时:通过
socket.sendall(b“退出\n”)

必须获取底层套接字,并调用相应的方法
sendall
recv
,如下所示

#需要先启动容器,不能直接启动shell
#因为method“run”不支持返回套接字
#还需要分离它,否则容器将同步等待命令结束
#调用“sleep”是可行的,它实际上是好的,因为这意味着如果出现问题,容器将超时
container=client.containers.run(“gliderlabs/alpine”,command=“sleep 100”,detach=True)
#现在我们称之为贝壳
#请注意,我们没有设置tty=True,否则将获得shell邀请
socket=container.exec\u run(cmd=“sh”,stdin=True,socket=True)
#我们设置了超时,以便以后不会被阻塞读取
socket.socket.settimeout(1)
#请注意,os.write不起作用
#因为它不进行TLS加密
#必须改用“sendall”
socket.sendall(b“ls\n”)
#发送后的读取块
尝试:
未知字节=socket.recv(1)
而1:
#请注意,os.read不起作用
#因为它不需要TLS解密
#但返回低级加密数据
#必须改用“socket.recv”
数据=socket.recv(16384)
如果没有数据:中断
打印(数据解码('utf8'))
除此之外。超时:通过
socket.sendall(b“退出\n”)