function dPostOrgin(args, callback){ $.post('/plugins/run', args, function(data) { callback(data); },'json'); } function dPost(method, version, args,callback){ var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); var req_data = {}; req_data['name'] = 'docker'; req_data['func'] = method; req_data['version'] = version; if (typeof(args) == 'string'){ req_data['args'] = JSON.stringify(toArrayObject(args)); } else { req_data['args'] = JSON.stringify(args); } dPostOrgin(req_data, function(data){ layer.close(loadT); if (!data.status){ //错误展示10S layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']}); return; } if(typeof(callback) == 'function'){ callback(data); } }); } function dPostCallbak(method, version, args,callback){ var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); var req_data = {}; req_data['name'] = 'docker'; req_data['func'] = method; args['version'] = version; if (typeof(args) == 'string'){ req_data['args'] = JSON.stringify(toArrayObject(args)); } else { req_data['args'] = JSON.stringify(args); } $.post('/plugins/callback', req_data, function(data) { layer.close(loadT); if (!data.status){ layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } if(typeof(callback) == 'function'){ callback(data); } },'json'); } function logsCon(id){ dPost('docker_con_log','',{Hostname:id},function(rdata){ var rdata = $.parseJSON(rdata.data); if(!rdata.status) { layer.msg(rdata.msg,{icon:2}); return; }; layer.open({ type:1, title:'Docker日志', area: '600px', closeBtn: 2, content:'
' +'
'+ (rdata.msg == '' ? 'No logs':rdata.msg) +'
' +'
', success:function(index,layers){ $(".crontab-log").scrollTop(1000000); } }); }); } 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 startCon(Hostname){ dPost('docker_run_con','',{Hostname:Hostname},function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg,function(){ if(rdata.status) { dockerConListRender(); } },{icon:rdata.status?1:2}); }); } function stopCon(Hostname){ dPost('docker_stop_con','',{Hostname:Hostname},function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg,function(){ if(rdata.status) { dockerConListRender(); } },{icon:rdata.status?1:2}); }); } function execCon(Hostname){ webShell(); var pdata_socket = {}; var shell = setInterval(function(){ if($('.term-box').length == 0){ pdata_socket['data'] = 'exit\n'; socket.emit('webssh',pdata_socket); setTimeout(function(){socket.emit('webssh',pdata_socket['data']);},1000); clearInterval(shell); } },500); setTimeout(function(){ dPost('docker_exec','',{Hostname:Hostname},function(res){ var res = $.parseJSON(res.data); if(!res.status){ layer.msg(res.msg,{icon:res.status?1:2}); }else{ pdata_socket['data'] = 'clear && ' + res.msg +'\n' socket.emit('webssh',pdata_socket); setTimeout(function(){socket.emit('webssh',pdata_socket['data']);},1000); } }); }); } function dockerConListRender(){ dPost('con_list', '', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); console.log(rdata); if (!rdata.status){ layer.msg(rdata.msg,{icon:2,time:2000}); return; } var list = ''; var rlist = rdata.data; for (var i = 0; i < rlist.length; i++) { var docker_status = 'stop'; var status = ''; if (rlist[i]['State']['Status'] == 'running'){ docker_status = 'start'; status = ''; } var op = ''; op += '终端 | '; op += '日志 | '; op += '删除'; list += ''; list += ''+rlist[i]['Name'].substring(1)+''; list += ''+rlist[i]['Config']['Image']+''; list += ''+getFormatTime(rlist[i]['Created'])+''; if (docker_status == 'start'){ list += ''+status+''; } else{ list += ''+status+''; } list += ''+op+''; list += ''; } $('#con_list tbody').html(list); }); } function createConTemplate(){ dPost('get_docker_create_info','',{},function(rdata){ var rdata = $.parseJSON(rdata.data); console.log(rdata); var rdata = rdata.data; var imageOpt = ''; for(var i=0;i'+imageName+''; } var iplistOpt = ''; for(var i=0;i'+rdata.iplist[i].address+''; } var layer_index = layer.open({ type: 1, title: "创建容器", area: '556', closeBtn: 2, shadeClose: false, btn: ['确定', '取消'], content: '
\
\ 镜像\
\
\
\ 绑定IP\
\
\
\ 端口映射\
\
\ \ \ \ \
\
\ \ \
当前未添加端口映射
\
\
\
\
\ 目录映射\
\
\ \ \ \ \
\
\ \ \
当前未添加目录映射
\
\
\
\
\ 环境变量
(每行一个)
\
\
\ \
\
\
\
\ 内存配额\
\ MB不超过, '+ rdata.memSize +'MB
\
\
\ CPU配额\
\ \ 越大,占用的CPU越多
\
\
\ 执行命令\
\
\ \
', success:function(){ $(".bt-cancel").click(function(){ layer.close(layer_index); }); $(".plus").click(function(){ var name1 = $(".type-port input[name='name1']").val(); var name2 = $(".type-port input[name='name2']").val(); if(name1 < 1 || name1 > 65535 || name2 < 1 || name2 > 65535 || isNaN(name1) || isNaN(name2)){ layer.msg('Port setting value range is invalid, range [1-65535]',{icon:2}); return; } var portval = $('#portabletr')[0].childNodes; for(var i=0;i',{icon:16,time:0,shade: [0.3, "#000"]}); $.post('/plugin?action=a&name=docker&s=IsPortExists',{port:port},function(rdata){ layer.close(loadT); if(rdata !== false){ layer.msg('Port ['+name2+'] is already in the mapping list!',{icon:2}); return; } var selecttype = $(".type-port select").val(); var portable= ''+name1+''+selecttype+''+name2+'Del'; $("#portabletr").append(portable); $(".more1").remove(); $(".minus").click(function(){ $(this).parents("tr").remove(); }); }); }); $(".plus2").click(function(){ var path1 = $(".type-volumes input[name='path1']").val(); var path2 = $(".type-volumes input[name='path2']").val(); var notPath = ['/boot','/bin','/sbin','/etc','/usr/bin','/usr/sbin','/dev'] if($.inArray(path2,notPath) != -1){ layer.msg('Cannot map' + path2,{icon:2}); return; } var portval = $('#portabletr2')[0].childNodes; for(var i=0;i'+path1+'\ '+selecttype+''+path2+'\ Del\ '; $("#portabletr2").append(portable); $(".more2").remove(); $(".minus2").click(function(){ $(this).parents("tr").remove(); }); }); }, yes:function(layero,layer_id){ var ports = {}; var volumes = {}; var portval = $('#portabletr')[0].childNodes; var address = $('.docker-address').val(); var portval2 = $('#portabletr2')[0].childNodes; var command = $('.docker-command').val() var entrypoint = $('.docker-entrypoint').val() var accept = []; //遍历端口映射 for(var i=0;i rdata.memSize){ layer.msg('内存配额不能大于物理内存 ['+rdata.memSize+']!',{icon:2}); return; } if(data.cpu_shares > 100 || data.cpu_shares < 1){ layer.msg('CPU配额设置值范围应为 [1-100]!',{icon:2}); return; } dPost('docker_create_con','', data, function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg,function(){ if(rdata.status) { layer.close(layer_index); dockerConListRender(); } },{ icon: rdata.status ? 1 : 2 }); }); } }); }); } function dockerConList(){ var con = '
\ \
\
\ \ \ \ \ \ \ \
名称镜像创建时间状态操作
\
\
\
'; $(".soft-man-con").html(con); dockerConListRender(); } function deleteImages(tag, id){ safeMessage('删除镜像','删除镜像['+tag+'],确定?',function(){ dPost('docker_remove_image','', {imageId:id,repoTags:tag},function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg,function(){ if(rdata.status) { dockerImageListRender(); } },{ icon: rdata.status ? 1 : 2 }); }); }); } function pullImages(tag, id){ console.log(tag, id); layer.msg('开发中!',{ icon: 2 }); } function dockerImageListRender(){ dPost('image_list', '', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); // console.log(rdata); if (!rdata.status){ layer.msg(rdata.msg,{icon:2,time:2000}); return; } var list = ''; var rlist = rdata.data; for (var i = 0; i < rlist.length; i++) { var tag = rlist[i]['RepoTags'].split(":")[1]; var license = 'null'; var desc = 'null'; if (rlist[i]['Labels'] == null){ license = 'free'; } var op = ''; op += '拉取 | '; op += '删除'; list += ''; list += ''+rlist[i]['RepoTags']+''; list += ''+tag+''; list += ''+toSize(rlist[i]['Size'])+''; list += ''+license+''; list += ''+desc+''; list += ''+op+''; list += ''; } $('#con_list tbody').html(list); }); } function dockerPullImagesFileTemplate(){ // 拉取镜像文件模板 var layer_index = layer.open({ type: 1, title: "获取镜像", area: '500px', closeBtn: 2, shadeClose: false, content: '
'+ '
'+ '官方库'+ '公共库'+ '私有库'+ '
'+ '
'+ '
'+ '镜像名:\
\ \ \
'+ '
'+ ''+ '\
\
', success:function(layero,layer_id){ $('.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) { layer.close(layer_index); dockerImageListRender(); } },{ 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) { layer.close(layer_index); dockerImageListRender(); } },{ 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) { layer.close(layer_index); dockerImageListRender(); } },{ icon: rdata.status ? 1 : 2 }); }); }); } }); } function dockerImageList(){ var con = '
\ \
\
\ \ \ \ \ \ \ \ \
名称版本大小证书描述操作
\
\
\
\
'; $(".soft-man-con").html(con); dockerImageListRender(); } //获取文件数据 function dockerGetFileBytes(fileName){ window.open('/files/download?filename='+encodeURIComponent(fileName)); } //删除文件 function dockerDeleteFile(fileName){ layer.confirm(lan.get('recycle_bin_confirm',[fileName]),{title:'删除文件',closeBtn:2,icon:3},function(){ layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']}); $.post('/files/delete', 'path=' + encodeURIComponent(fileName), function(rdata) { showMsg(rdata.msg,function(){ dockerImageOutputRender(); },{icon: rdata.status ? 1 : 2}); },'json'); }); } function dockerLoadFile(fileName){ dPost('image_pick_load', '', {file:fileName}, function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg,function(){ dockerImageOutputRender(); },{icon: rdata.status ? 1 : 2}); }); } function dockerImageOutputRender(){ dPost('image_pick_list', '', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); if (!rdata.status){ layer.msg(rdata.msg,{icon:2,time:10000}); return; } var list = ''; var rlist = rdata.data; for (var i = 0; i < rlist.length; i++) { var op = ''; op += '下载 | '; op += '导入 | '; op += '删除'; list += ''; list += ''+rlist[i]['name']+''; list += ''+rlist[i]['size']+''; list += ''+rlist[i]['time']+''; list += ''+op+''; list += ''; } $('#con_list tbody').html(list); }); } //上传文件 function uploadImageFiles(upload_dir){ var image_layer = layer.open({ type:1, closeBtn: 1, title:"上传导入文件["+upload_dir+']', area: ['500px','300px'], shadeClose:false, content:'
\ \ \ \ \ \ \ 文件编码:\ \ \ \
    \
    ', success:function(){ $('#filesClose').click(function(){ layer.close(image_layer); }); } }); uploadStart(function(){ showMsg('上传成功!', function(){ dockerImageOutputRender(); layer.close(image_layer); },{icon:1,time:2000}); }); } function dockerImagePick(){ dPost('image_list', '', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); var imageList = rdata.data; // console.log(imageList); var _tbody = ''; for (var i = 0; i < imageList.length; i++) { if (imageList[i] == null) { _tbody = '当前无镜像'; continue; } var versionData = imageList[i].RepoTags,version,reg = new RegExp('((?<=:)[0-9A-z/.-]*)$'); version = versionData.match(reg); _tbody += "\ "+imageList[i].RepoTags+"\ "+ version[0] +"\ "+ toSize(imageList[i].Size) +""; } var layerS = layer.open({ type: 1, title: "选择镜像", area: '500px', closeBtn: 2, btn:['打包','取消'], shadeClose: false, content: '
    \ \ \ \ \ \ \ \ '+ _tbody +'\
    名称版本大小
    \
    ', success:function(){ readerTableChecked(); tableFixed('images_table'); }, yes:function(layers,index){ var data = '', tit = '\xa0', choose_num = $(".images_pull tbody [name=images]:checked").length; for (var i = 0; i < choose_num; i++) { if(choose_num == 0){ layer.msg('Please choose the images which need to pack',{icon:2}); return false; } data += $(".images_pull tbody [name=images]:checked").eq(i).attr('data-name'); if(i != (choose_num-1)) data += ' '; } dPost('image_pick_save', '', {images:data}, function(rdata){ var rdata = $.parseJSON(rdata['data']); showMsg(rdata.msg, function(){ dockerImageOutputRender(); layer.close(layerS); },{icon:rdata.status?1:2,time:2000}); }); } }); }); } function dockerImageOutput(){ var con = '
    \ \ \
    \
    \ \ \ \ \ \ \
    名称大小时间操作
    \
    \
    \
    \
    '; $(".soft-man-con").html(con); $('#btn_image_upload').click(function(){ dPostOrgin({ name:'docker', func:'image_pick_dir', version:'', },function(rdata){ var rdata = $.parseJSON(rdata['data']); var upload_dir = rdata['data']; uploadImageFiles(upload_dir); }); }); dockerImageOutputRender(); } function deleteIpList(address){ safeMessage('删除IP','你将删除从IP地址池['+address+'],确定?',function(){ dPost('docker_del_ip','', {address:address},function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg,function(){ if(rdata.status) { dockerIpListRender(); } },{ icon: rdata.status ? 1 : 2 }); }); }); } function dockerIpListRender(){ dPost('docker_get_iplist', '', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); // console.log(rdata); if (!rdata.status){ layer.msg(rdata.msg,{icon:2,time:2000}); return; } var list = ''; var rlist = rdata.data; for (var i = 0; i < rlist.length; i++) { var op = ''; op += '删除'; list += ''; list += ''+rlist[i]['address']+''; list += ''+rlist[i]['netmask']+''; list += ''+rlist[i]['gateway']+''; list += ''+op+''; list += ''; } $('#ip_list tbody').html(list); }); } function dockerAddIpPool(){ var address = $('input[name="address"]').val(); var netmask = $('input[name="netmask"]').val(); var gateway = $('input[name="gateway"]').val(); dPost('docker_add_ip','', {address:address,netmask:netmask,gateway:gateway}, function(rdata){ var rdata = $.parseJSON(rdata.data); showMsg(rdata.msg, function(){ dockerIpListRender(); },{icon:rdata.status?1:2}) }); } function dockerIpList(){ var con = '
    \
    \ \ \ \ \
    \
    \
    \ \ \ \ \ \ \
    IP地址子网掩码网关操作
    \
    \
    \
    \
    '; $(".soft-man-con").html(con); dockerIpListRender(); } // login function repoLogin(){ var _option1= ""; var obj = {hub_name: "", namespace: "",name: "", registry: "", user_pass: "", user_name: "",arry: ['Docker Repository','Other Repository']}; for(var i = 0; i< obj.arry.length;i++){ _option1 += ''; } var layer_index = layer.open({ type: 1, title: "登录到存储库", area: '450px', closeBtn: 2, shadeClose: false, content: '
    '+ ''+ '
    '+ '
    Repository Type
    '+ '
    Name:
    '+ '
    Username:
    '+ '
    Password:
    '+ '
    Repository Name:
    '+ '
    Namespaces:
    '+ ''+ '
    '+ '
    '+ '
    ', success:function(){ $('[name="dtype"]').change(function(e){ var docker_type = $(this).val(); if(docker_type == 'Other Repository'){ $('.docker_content .line').show(); }else{ $('.docker_content .line').filter(":lt(3)").show().end().filter(":gt(4)").hide(); } }); $('.login_aliyun').click(function(){ var user = $('[name="user"]').val(), passwd = $('[name="passwd"]').val(), registry = $('[name="registry"]').val(), name = $('[name="ctm_name"]').val(), hub_name = $('[name="hub_name"]').val(), namespace = $('[name="namespace"]').val(); var args = { user:user, passwd:passwd, registry:'', repository_name:name, hub_name:hub_name, namespace:namespace }; if($('[name="dtype"]').val() == 'Docker Repository'){ args.registry = ''; }else{ args.registry = registry; } console.log(obj); dPost('docker_login', '', args, function(rdata){ var rdata = $.parseJSON(rdata.data); console.log(rdata); layer.msg(rdata.msg,{icon:rdata.status?1:2}); if(res.status){ repoListRender(); layer.close(layer_index); } }); }); } }); } function delRepo(address){ safeMessage('退出','你将退出 ['+address+'],确定?',function(){ dPost('docker_logout', '', {registry:address}, function(rdata){ var rdata = $.parseJSON(rdata.data); layer.msg(rdata.msg,{icon:rdata.status?1:2}); if(rdata.status) { repoListRender(); } } ); }); } function repoListRender(){ dPost('repo_list', '', {}, function(rdata){ var rdata = $.parseJSON(rdata.data); console.log(rdata); if (!rdata.status){ layer.msg(rdata.msg,{icon:2,time:2000}); return; } var list = ''; var rlist = rdata.data; for (var i = 0; i < rlist.length; i++) { list += ''; list += ''+rlist[i]['hub_name']+''; list += ''+rlist[i]['repository_name']+''; list += ''+rlist[i]['namespace']+''; list += ''+rlist[i]['registry']+''; list += '删除'; list += ''; } $('#con_list tbody').html(list); }); } function repoList(){ var con = '
    \ \
    \
    \ \ \ \ \ \ \ \ \ ' + '
    NameRepository NameNameSpace地址操作
    \
    \
    \
    \
    '; $(".soft-man-con").html(con); //login $('#docker_login').click(function(){ repoLogin(); }); repoListRender(); }