捕获docker容器内的shell脚本的输出到使用docker sdk for python的文件)

我有一个名为test.sh docker容器中有一个shell脚本。 我想把这个脚本的输出传给一个文件。 我可以使用docker exec命令或通过login到shell(使用./test.sh > test.txt )并运行./test.sh > test.txt 。 但是,我想知道如何使用docker sdk for python实现相同的结果。 这是我的代码到目前为止:

 import docker client = docker.APIClient(base_url='unix://var/run/docker.sock') container= client.create_container( 'ubuntu:16.04', '/bin/bash', stdin_open=True, tty=True, working_dir='/home/psr', \ volumes=['/home/psr/data'], \ host_config=client.create_host_config(binds={ '/home/xxxx/data_generator/data/': { 'bind': '/home/psr/data', 'mode': 'rw', }, }) ) client.start(container=container.get('Id')) cmds= './test.sh > test.txt' exe=client.exec_create(container=container.get('Id'), cmd= cmds, stdout=True) exe_start=client.exec_start(exec_id=exe, stream=True) for val in exe_start: print (val) 

我正在使用docker sdk的低级API。 如果您知道如何使用高级API获得与上面相同的结果,请告诉我们。

如果其他人有同样的问题,这是我如何解决它。 请让我知道,如果你有一个更好的解决scheme。

 import docker client = docker.APIClient(base_url='unix://var/run/docker.sock') container= client.create_container( 'ubuntu:16.04', '/bin/bash', stdin_open=True, tty=True, working_dir='/home/psr', \ volumes=['/home/psr/data'], \ host_config=client.create_host_config(binds={ '/home/xxxx/data_generator/data/': { 'bind': '/home/psr/data', 'mode': 'rw', }, }) ) client.start(container=container.get('Id')) cmds= './test.sh' exe=client.exec_create(container=container.get('Id'), cmd=cmds, stdout=True) exe_start=client.exec_start(exec_id=exe, stream=True) with open('path_to_host_directory/test.txt', 'wb') as f: # wb: For Binary Output for val in exe_start: f.write(val)