pull/420/head
midoks 2 years ago
parent 0a60d66732
commit ee81a86d24
  1. 50
      plugins/docker/index.py
  2. 92
      plugins/docker/js/docker.js

@ -187,6 +187,52 @@ def conListData():
return mw.returnJson(True, 'ok', clist) return mw.returnJson(True, 'ok', clist)
def dockerRemoveCon():
args = getArgs()
data = checkArgs(args, ['Hostname'])
if not data[0]:
return data[1]
Hostname = args['Hostname']
c = getDClient()
try:
conFind = c.containers.get(Hostname)
try:
path_list = conFind.attrs['GraphDriver'][
'Data']['LowerDir'].split(':')
for i in path_list:
mw.execShell('chattr -R -i %s' % i)
except:
pass
conFind.remove(force=True)
return mw.returnJson(True, '成功删除!')
except docker.errors.APIError as ex:
return mw.returnJson(False, '删除失败!' + str(ex))
def dockerLogCon():
args = getArgs()
data = checkArgs(args, ['Hostname'])
if not data[0]:
return data[1]
Hostname = args['Hostname']
c = getDClient()
try:
conFind = c.containers.get(Hostname)
if not conFind:
return mw.returnJson(False, 'The specified container does not exist!')
log = conFind.logs()
if not isinstance(log, str):
log = log.decode()
return mw.returnJson(True, log)
except docker.errors.APIError as ex:
return mw.returnJson(False, 'Get Logs failed')
def imageList(): def imageList():
imageList = [] imageList = []
c = getDClient() c = getDClient()
@ -378,6 +424,10 @@ if __name__ == "__main__":
print(getConf()) print(getConf())
elif func == 'con_list': elif func == 'con_list':
print(conListData()) print(conListData())
elif func == 'docker_con_log':
print(dockerLogCon())
elif func == 'docker_remove_con':
print(dockerRemoveCon())
elif func == 'image_list': elif func == 'image_list':
print(imageListData()) print(imageListData())
elif func == 'docker_remove_image': elif func == 'docker_remove_image':

@ -53,31 +53,48 @@ function dPostCallbak(method, version, args,callback){
},'json'); },'json');
} }
function dockerConList(){
var con = '<div class="safe bgw">\ function logsCon(id){
<button onclick="" title="" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">创建容器</button>\ dPost('docker_con_log','',{Hostname:id},function(rdata){
<span style="float:right"> \ var rdata = $.parseJSON(rdata.data);
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="delDbBatch();" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\ if(!rdata.status) {
</span>\ layer.msg(rdata.msg,{icon:2});
<div class="divtable mtb10">\ return;
<div class="tablescroll">\ };
<table id="con_list" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\ layer.open({
<thead><tr>\ type:1,
<th>名称</th>\ title:'Docker日志',
<th>镜像</th>\ area: '600px',
<th>创建时间</th>\ closeBtn: 2,
<th>状态</th>\ content:'<div class="bt-form">'
<th style="text-align:right;">操作</th></tr></thead>\ +'<pre class="crontab-log" style="overflow: auto; \
<tbody>\ border: 0px none; line-height:23px;padding: 15px; \
' + '</tbody></table>\ margin: 0px; white-space: pre-wrap; height: 405px; \
</div>\ background-color: rgb(51,51,51);color:#f1f1f1;\
<div id="databasePage" class="dataTables_paginate paging_bootstrap page"></div>\ border-radius:0px;">'+ (rdata.msg == '' ? 'No logs':rdata.msg) +'</pre>'
</div>\ +'</div>',
</div>'; success:function(index,layers){
$(".crontab-log").scrollTop(1000000);
}
});
});
}
$(".soft-man-con").html(con); function deleteCon(Hostname){
// 删除容器
safeMessage('删除容器 ', '删除容器 ['+Hostname+'], 确定?',function(){
dPost('docker_remove_con','',{Hostname:Hostname},function(rdata){
var rdata = $.parseJSON(rdata.data);
showMsg(rdata.msg,function(){
if(rdata.status) {
dockerConListRender();
}
},{icon:rdata.status?1:2});
});
});
}
function dockerConListRender(){
dPost('con_list', '', {}, function(rdata){ dPost('con_list', '', {}, function(rdata){
// console.log(rdata); // console.log(rdata);
var rdata = $.parseJSON(rdata.data); var rdata = $.parseJSON(rdata.data);
@ -99,8 +116,8 @@ function dockerConList(){
var op = ''; var op = '';
op += '<a href="javascript:;" onclick="pullImages(\''+rlist[i]['RepoTags']+'\',\''+rlist[i]['Id']+'\')" class="btlink">终端</a> | '; op += '<a href="javascript:;" onclick="pullImages(\''+rlist[i]['RepoTags']+'\',\''+rlist[i]['Id']+'\')" class="btlink">终端</a> | ';
op += '<a href="javascript:;" onclick="pullImages(\''+rlist[i]['RepoTags']+'\',\''+rlist[i]['Id']+'\')" class="btlink">日志</a> | '; op += '<a href="javascript:;" onclick="logsCon(\''+rlist[i]['Id']+'\')" class="btlink">日志</a> | ';
op += '<a href="javascript:;" onclick="deleteImages(\''+rlist[i]['RepoTags']+'\',\''+rlist[i]['Id']+'\')" class="btlink">删除</a>'; op += '<a href="javascript:;" onclick="deleteCon(\''+rlist[i]['Config']['Hostname']+'\')" class="btlink">删除</a>';
list += '<tr>'; list += '<tr>';
@ -114,6 +131,33 @@ function dockerConList(){
$('#con_list tbody').html(list); $('#con_list tbody').html(list);
}); });
}
function dockerConList(){
var con = '<div class="safe bgw">\
<button onclick="" title="" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">创建容器</button>\
<span style="float:right"> \
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="delDbBatch();" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\
</span>\
<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;">\
<thead><tr>\
<th>名称</th>\
<th>镜像</th>\
<th>创建时间</th>\
<th>状态</th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>\
' + '</tbody></table>\
</div>\
<div id="databasePage" class="dataTables_paginate paging_bootstrap page"></div>\
</div>\
</div>';
$(".soft-man-con").html(con);
dockerConListRender();
} }

Loading…
Cancel
Save