update
This commit is contained in:
parent
d5b6eb2325
commit
f6da241c85
|
|
@ -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…
Reference in New Issue