0

我的 docker 容器中有一个名为test.sh. 我想将此脚本的输出通过管道传输到文件中。我可以使用docker exec命令或登录到 shell(使用docker run -it)并运行./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 实现与上述相同的结果,请告诉我。

4

1 回答 1

0

如果其他人有同样的问题,这就是我解决它的方法。如果您有更好的解决方案,请告诉我。

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)
于 2017-11-16T13:07:17.167 回答