1

このリンクの get_archive()リンクの指示に従っています が、コンテナーを作成する代わりに、私の場合は「docker-nginx」を入力文字列として、またコンテンツが存在する宛先フォルダーとして既に実行中のコンテナーを使用しようとしていました。 nginxサーバーで「/usr/share/nginx/html」としてフォルダーの統計の出力も取得しました。抽出されたtarファイルがどこにない場合、この関数で宛先フォルダーを指定する方法を知りたいですか? ファイルがダウンロードされた場所を特定できませんでした

ここに私のコードがあります strm,stat=c.get_archive(container_name,'/usr/share/nginx/html')

print(strm)<requests.packages.urllib3.response.HTTPResponse object at 0x7fe3581e1250> の出力は print(stat) の出力は{u'linkTarget': u'', u'mode': 2147484157, u'mtime': u'2016-10-05T09:37:17.928258508-05:00', u'name': u'html', u'size': 4096}

4

3 に答える 3

1

答えは、使用している docker sdk のバージョンによって異なります。

docker3.X より前の SDK バージョンの場合

get_archiveファイルのようなストリームを返します。したがって、shutil.copyfileobjデータをファイルにストリーミングするために使用します。

import shutil

strm, stat = container.get_archive(container_name, path_in_container)
with open('out.html', 'w') as outfile:
    shutil.copyfileobj(strm, outfile)

dockerSDK 3.X+の場合

get_archiveファイルのコンテンツに対して反復子を返すので、反復して次のように記述します。

strm, stat = container.get_archive(container_name, path_in_container)
with open('out.html', 'w') as outfile:
    for d in strm:
        outfile.write(d)
于 2018-03-05T19:50:23.227 に答える
0

この関数がどのように機能し、コンテナーに対して行われた要求の生の応答を返すかがわかりました。生の応答の説明はこのリンク にあります。生のコンテンツを抽出するために、このコードを使用して、生のデータを出力ファイルに従ってテキスト形式で簡単に読み取ることができます。

raw_data=strm.read()
f= open('out.html', 'w')
f.write(raw_data)
于 2016-10-08T21:33:59.573 に答える