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); } $.post('/plugins/run', 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); } },'json'); } 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 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(); }