pull/420/head
midoks 2 years ago
parent d5b6eb2325
commit f6da241c85
  1. 24
      plugins/docker/index.html
  2. 80
      plugins/docker/index.py
  3. 105
      plugins/docker/js/docker.js

@ -1,3 +1,27 @@
<style type="text/css">
.docker-sub {
border-bottom: 1px solid #ccc;
height: 30px;
line-height: 30px;
margin-bottom: 15px;
}
.docker-sub .on {
border-bottom: 2px solid #20a53a;
color: #20a53a;
font-weight: bold;
font-family: "宋体";
}
.docker-sub span {
display: inline-block;
font-size: 14px;
height: 30px;
padding: 0 25px;
cursor: pointer;
}
</style>
<div class="bt-form">
<div class='plugin_version'></div>
<div class="bt-w-main">

@ -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':

@ -268,10 +268,113 @@ function dockerImageListRender(){
});
}
function dockerPullImagesFileTemplate(){
// 拉取镜像文件模板
var layer_index = layer.open({
type: 1,
title: "获取镜像",
area: '500px',
closeBtn: 2,
shadeClose: false,
content: '<div class="bt-docker pd20">'+
'<div class="docker-sub">'+
'<span class="on">官方库</span>'+
'<span>公共库</span>'+
'<span>私有库</span>'+
'</div>'+
'<div class="bt-form bt-docker-con">'+
'<div class="conter official_pull pd15"><div class="line">'+
'<span class="tname">镜像名:</span>\
<div class="info-r c4">\
<input class="bt-input-text mr5" type="text" name="official_pull_name" style="width:218px" value="">\
<button type="button" class="btn btn-sm btn-success official_pull_btn">获取</button>\
</div>'+
'</div></div>'+
'<div class="conter public_pull pd15" style="display: none;"><div class="line">'+
'<span class="tname">镜像名:</span>\
<div class="info-r c4">\
<input class="bt-input-text mr5" type="text" name="public_pull_path" style="width:218px" value="">\
<button type="button" class="btn btn-sm btn-success public_pull_btn">获取</button>\
</div>'+
'</div></div>'+
'<div class="conter private_pull pd15" style="display: none;">'+
'<div class="line"><span class="tname">镜像地址:</span>\
<div class="info-r c4">\
<input class="bt-input-text mr5" type="text" name="private_pull_path" style="width:218px" value="">\
<button type="button" class="btn btn-sm btn-success private_pull_btn">获取</button>\
</div>\
</div>\
</div>\
</div>\
</div>',
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 = '<div class="safe bgw">\
<button onclick="" title="" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">获取镜像</button>\
<button onclick="dockerPullImagesFileTemplate()" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">获取镜像</button>\
<div class="divtable mtb10">\
<div class="tablescroll">\
<table id="con_list" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\

Loading…
Cancel
Save