/out" 这将执-6ren">
gpt4 book ai didi

docker - 如何发送到 docker-py 容器的标准输入?

转载 作者:IT老高 更新时间:2023-10-28 12:46:38 25 4
gpt4 key购买 nike

考虑这个shell示例:

echo "hello" | docker run --rm -ti  -a stdin busybox \
/bin/sh -c "cat - >/out"

这将执行一个busybox容器并创建一个包含hello内容的新文件/out

我将如何使用 docker-py 完成此任务?

docker-py 等价物:

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

stdin_open = True,但是我在哪里写'hello'

最佳答案

当时不可能将标准输入附加到正在运行的容器。这已经改变了。

使用当前版本的 docker-py,这现在是可能的(又名 slix 的解决方法)。这取自 GitHub 上的讨论。专注于python 2.7。

使用 docker-py 版本 3.1.1 在 python 3 中查看此示例

import docker, tarfile
from io import BytesIO

def test_send_data_via_stdin_into_container():
client = docker.APIClient()

# create container
container = client.create_container(
'busybox',
stdin_open = True,
command = 'sh -c "cat - >/received.txt"')
client.start(container)

# attach stdin to container and send data
original_text_to_send = 'hello this is from the other side'
s = client.attach_socket(container, params={'stdin': 1, 'stream': 1})
s._sock.send(original_text_to_send.encode('utf-8'))
s.close()

# stop container and collect data from the testfile
client.stop(container)
client.wait(container)
raw_stream,status = client.get_archive(container,'/received.txt')
tar_archive = BytesIO(b"".join((i for i in raw_stream)))
t = tarfile.open(mode='r:', fileobj=tar_archive)
text_from_container_file = t.extractfile('received.txt').read().decode('utf-8')
client.remove_container(container)

# check for equality
assert text_from_container_file == original_text_to_send

if __name__ == '__main__':
test_send_data_via_stdin_into_container()

关于docker - 如何发送到 docker-py 容器的标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com