From f6da241c8586cbbb0e1e2f0a302990f7aa15cbff Mon Sep 17 00:00:00 2001 From: midoks Date: Sun, 2 Jul 2023 14:38:56 +0800 Subject: [PATCH] update --- plugins/docker/index.html | 24 ++++++++++ plugins/docker/index.py | 80 +++++++++++++++++++++++++++++++++ plugins/docker/js/docker.js | 105 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 208 insertions(+), 1 deletion(-) diff --git a/plugins/docker/index.html b/plugins/docker/index.html index 374dd339a..6c3cfdc0a 100755 --- a/plugins/docker/index.html +++ b/plugins/docker/index.html @@ -1,3 +1,27 @@ + +
diff --git a/plugins/docker/index.py b/plugins/docker/index.py index 4f67cd2ba..134278e6d 100755 --- a/plugins/docker/index.py +++ b/plugins/docker/index.py @@ -324,6 +324,82 @@ def imageList(): return imageList +def dockerPull(): + # pull Dockr 官方镜像 + args = getArgs() + data = checkArgs(args, ['images']) + if not data[0]: + return data[1] + + images = args['images'] + if ':' in images: + pass + else: + images = images + ':latest' + + c = getDClient() + try: + ret = c.images.pull(images) + if ret: + return mw.returnJson(True, '拉取成功!') + else: + return mw.returnJson(False, '拉取失败,请检查镜像名称或是否需要登录docker进行下载') + except: + ret = mw.execShell('docker image pull %s' % images) + if 'invalid' in ret[-1]: + return mw.returnJson(False, '拉取失败,请检查镜像名称或是否需要登录docker进行下载') + else: + return mw.returnJson(True, '拉取成功!') + + +def dockerPlulPath(path): + if not path and path == '': + return mw.returnJson(False, 'Invalid address') + + ret = mw.execShell('docker image pull %s' % path) + if 'invalid' in ret[-1]: + return mw.returnJson(False, '拉取失败,请检查镜像名称或是否需要登录docker进行下载') + else: + return mw.returnJson(True, '拉取成功!') + + +def dockerPullReg(): + # pull Dockr 官方镜像 + args = getArgs() + data = checkArgs(args, ['path']) + if not data[0]: + return data[1] + + path = args['path'] + return dockerPlulPath(path) + + +# 判断镜像是否存在 +def checkImage(path): + image_list = imageList() + for i in image_list: + if path == i["RepoTags"]: + return mw.returnData(False, '镜像已存在!') + + +def dockerPullPrivateNew(): + # pull Dockr 官方镜像 + args = getArgs() + data = checkArgs(args, ['path']) + if not data[0]: + return data[1] + + path = args['path'] + check = checkImage(path) + if check: + return mw.getJson(check) + + my_repo = repoList() + if not my_repo: + return mw.returnJson(False, '未登录任何私人存储库,请登录然后拉取') + return dockerPlulPath(path) + + def imageListData(): try: ilist = imageList() @@ -494,6 +570,10 @@ if __name__ == "__main__": print(dockerStopCon()) elif func == 'docker_exec': print(dockerExec()) + elif func == 'docker_pull': + print(dockerPull()) + elif func == 'docker_pull_reg': + print(dockerPullReg()) elif func == 'image_list': print(imageListData()) elif func == 'docker_remove_image': diff --git a/plugins/docker/js/docker.js b/plugins/docker/js/docker.js index cc0aa11e1..659c36b11 100755 --- a/plugins/docker/js/docker.js +++ b/plugins/docker/js/docker.js @@ -268,10 +268,113 @@ function dockerImageListRender(){ }); } +function dockerPullImagesFileTemplate(){ + // 拉取镜像文件模板 + var layer_index = layer.open({ + type: 1, + title: "获取镜像", + area: '500px', + closeBtn: 2, + shadeClose: false, + content: '
'+ + '
'+ + '官方库'+ + '公共库'+ + '私有库'+ + '
'+ + '
'+ + '
'+ + '镜像名:\ +
\ + \ + \ +
'+ + '
'+ + ''+ + '\ +
\ +
', + success:function(layero,layer){ + + $('.docker-sub span').click(function(){ + var index = $(this).index(); + $(this).addClass('on').siblings().removeClass('on'); + $(this).parent().next().find('.conter').eq(index).show().siblings().hide(); + }); + + $('.official_pull_btn').click(function(){ + var name = $('[name="official_pull_name"]').val(); + if(name == ''){ + layer.msg('镜像名不能为空!'); + return; + } + dPost('docker_pull','',{images:name}, function(rdata){ + var rdata = $.parseJSON(rdata.data); + showMsg(rdata.msg,function(){ + if(rdata.status) { + dockerImageListRender(); + layer.close(layer_index); + } + },{ icon: rdata.status ? 1 : 2 }); + }); + }); + + $('.public_pull_btn').click(function(){ + var path = $('[name="public_pull_path"]').val(); + if(path == ''){ + layer.msg('公共网络镜像地址不能为空。'); + return; + } + + dPost('docker_pull_reg','',{path:path}, function(rdata){ + var rdata = $.parseJSON(rdata.data); + showMsg(rdata.msg,function(){ + if(rdata.status) { + dockerImageListRender(); + layer.close(layer_index); + } + },{ icon: rdata.status ? 1 : 2 }); + }); + }); + $('.private_pull_btn').click(function(){ + var path = $('[name="private_pull_path"]').val(); + if(path == ''){ + layer.msg('专用镜像地址不能为空!'); + return + } + + dPost('docker_pull_private_new','',{path:path}, function(rdata){ + var rdata = $.parseJSON(rdata.data); + showMsg(rdata.msg,function(){ + if(rdata.status) { + dockerImageListRender(); + layer.close(layer_index); + } + },{ icon: rdata.status ? 1 : 2 }); + }); + }); + } + + }); +} + function dockerImageList(){ var con = '
\ - \ + \
\
\ \