我知道有一种可能的方法可以使用docker cp在主机和docker容器之间双向复制文件,也可以使用docker-py从运行的容器中获取文件。但我无法弄清楚如何(或者如果可能的话)使用docker-py将文件从主机复制到正在运行的容器。你们有遇到过这样的问题吗?是否有可能这样做,或者我必须使用python os.system执行命令。我想避免这种解决方案。
docker cp
os.system
rqdpfwrv1#
类似这样的东西应该可以工作:
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')
lnlaulya2#
使用内存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())
gwo2fgha3#
#!/usr/bin/python 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(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')
3条答案
按热度按时间rqdpfwrv1#
类似这样的东西应该可以工作:
然后像这样使用它:
lnlaulya2#
使用内存BytesIO的代码段:
gwo2fgha3#