簡體   English   中英

如何使用 docker-py(docker SDK)將文件從主機復制到容器

[英]How to copy a file from host to container using docker-py (docker SDK)

我知道,有可能如何使用docker cp在主機和 docker 容器之間雙向復制文件,也可以使用 docker-py 從正在運行的容器中獲取文件。 但我無法弄清楚如何(或者甚至可能)使用 docker-py 將文件從主機復制到正在運行的容器。 各位有遇到此類問題的經驗嗎? 是否可以這樣做,或者我必須使用 python os.system執行命令。 我想避免這種解決方案。

像這樣的東西應該工作:

import os
import tarfile
import docker

client = docker.from_env()

def copy_to(src, dst):
    name, dst = dst.split(':')
    container = client.containers.get(name)

    os.chdir(os.path.dirname(src))
    srcname = os.path.basename(src)
    tar = tarfile.open(src + '.tar', mode='w')
    try:
        tar.add(srcname)
    finally:
        tar.close()

    data = open(src + '.tar', 'rb').read()
    container.put_archive(os.path.dirname(dst), data)

然后像這樣使用它:

copy_to('/local/foo.txt', 'my-container:/tmp/foo.txt')

使用內存 BytesIO 的代碼片段:

def copy_to_container(container: 'Container', src: str, dst_dir: str):
    """ src shall be an absolute path """
    stream = io.BytesIO()
    with tarfile.open(fileobj=stream, mode='w|') as tar, open(src, 'rb') as f:
        info = tar.gettarinfo(fileobj=f)
        info.name = os.path.basename(src)
        tar.addfile(info, f)

    container.put_archive(dst_dir, stream.getvalue())

#!/usr/bin/python

導入 os 導入 tarfile 導入 docker

客戶端 = docker.from_env()

def copy_to(src, dst): name, dst = dst.split(':') container = client.containers.get(name)

os.chdir(os.path.dirname(src))
srcname = os.path.basename(src)
tar = tarfile.open(srcname + '.tar', mode='w')
obj=os.walk(srcname)
for items in obj:
    for files in items[2]:
        if files[-4::] == ".csv" :
            abs_path = items[0] + "/" + files
            tar.add(abs_path)

tar.close()
data = open(srcname + '.tar', 'rb')
container.put_archive(dst, data)
data.close()

copy_to('source_directory', 'container_name:destination_directory')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM