2017-11-16 9 views
0

私はドッカーコンテナ内にシェルスクリプトtest.shを持っています。このスクリプトの出力をファイルにパイプしたいと思います。 docker execコマンドを使用するか、シェルにログイン(docker run -itを使用)し、./test.sh > test.txtを実行することでこれを行うことができます。しかし、私は同じ結果がpythonのdocker sdkを使ってどのように達成できるのか知りたいです。これまでのコードです:dockerコンテナ内のシェルスクリプトの出力を、Pythonのdocker sdkを使用してファイルに取り込みます。

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を使用して上記と同じ結果を得る方法が分かっている場合は、教えてください。

+0

ベストプラクティスは、 'test.sh'が出力をstdoutに送信し、' docker log' APIを使ってそれをキャプチャすることができます。 – stacksonstacks

+0

出力をコンテナ内またはドッカーホスト上に表示しますか? – Matt

+0

@Mattホストとドッカーの両方のコンテナにアクセスできるマウントされたボリュームに保存されているファイルに書きたいと思います。この質問では、コンテナ内の/ home/psr/dataディレクトリを参照しています。 – Vishnu

答えて

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) 
関連する問題