docker-py 文件传输put_archive

本文档介绍了如何使用docker-py库的put_archive方法将文件上传到Docker容器。根据官方文档,data参数应为二进制文件流,且上传的文件必须是.tar格式,并确保容器内的目标目录已存在。在实践中,需要先创建目录以避免错误。参考外文代码可以更好地理解这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://docker-py.readthedocs.io/en/stable/api/#put_archive
docker-py doc中对文件传输的操作定义为

put_archive

Insert a file or folder in an existing container using a tar archive as source.

Params:

container (str): The container where the file(s) will be extracted
path (str): Path inside the container where the file(s) will be extracted. Must exist.
data (bytes): tar data to be extracted

其中,data字段的类型为bytes,期初认为是python3中支持的bytes类型,但经过参考一片外文文章发现并不是这样,只是需要data是二进制文件流即可,
同时还要保证
1.上传文件是.tar格式,不然会发生错误
2.容器内目录必须存在,所以需要先使用mkdir -p建立目录

def uploadFile(name,source,dest,file):
    #check path exist or create dir
    id=d.exec_create(container=name, cmd='mkdir -p ' + dest)
    d.exec_start(exec_id=id)
    f = open(file, 'rb')#二进制读
    filedata = f.read()
    d.put_archive(container=name, path=source, data=filedata)

附上外文代码,

import sys
import docker

def start ( cli, event ):
   """ handle 'start' events """
   dest = '/tmp/monitoring'
   source = 'monitor.tar'
   command = dest+'/register.sh'
   # read tar file into memory
   f = open(source, 'rb')
   filedata = f.read()
   # execute (1) : "mkdir -p /tmp/monitoring"
   exe = cli.exec_create( container=event['id'], cmd='mkdir -p '+dest )
   cli.exec_start( exec_id=exe )
   # copy and extract tar file into container
   cli.put_archive( container=event['id'], path=dest, data=filedata )
   # execute (2) : "/tmp/monitoring/register.sh"
   exe = cli.exec_create( container=event['id'], cmd=command, stdout=False, stderr=False )
   cli.exec_start( exec_id=exe, detach=True )

thismodule = sys.modules[__name__]
# create a docker client object that talks to the local docker daemon
cli = docker.Client(base_url='unix://var/run/docker.sock')
# start listening for new events
events = cli.events(decode=True)
# possible events are:
# attach, commit, copy, create, destroy, die, exec_create, exec_start, export,
# kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update
for event in events:
   # if a handler for this event is defined, call it
   if (hasattr( thismodule , event['Action'])):
      getattr( thismodule , event['Action'])( cli, event )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值