diff --git a/plugins/docker/index.py b/plugins/docker/index.py
index 4f67cd2ba..134278e6d 100755
--- a/plugins/docker/index.py
+++ b/plugins/docker/index.py
@@ -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':
diff --git a/plugins/docker/js/docker.js b/plugins/docker/js/docker.js
index cc0aa11e1..659c36b11 100755
--- a/plugins/docker/js/docker.js
+++ b/plugins/docker/js/docker.js
@@ -268,10 +268,113 @@ function dockerImageListRender(){
});
}
+function dockerPullImagesFileTemplate(){
+ // 拉取镜像文件模板
+ var layer_index = layer.open({
+ type: 1,
+ title: "获取镜像",
+ area: '500px',
+ closeBtn: 2,
+ shadeClose: false,
+ content: '
'+
+ '
'+
+ '官方库'+
+ '公共库'+
+ '私有库'+
+ '
'+
+ '
\
+
',
+ 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 = '