def create_containers(request): ''' 创建容器 ''' data=simplejson.loads(request.body) # 单个端口与多个端口映射 PortBindings={} ExposedPorts={} if isinstance(data['port'], str): port_key='%s/%s' % (data['port'], data['protocol']) PortBindings[port_key]=[{'HostPort': data['HostPort']}] ExposedPorts[port_key]={} else: for n in range(len(data['port'])): port_key='%s/%s' % (data['port'][n], data['protocol'][n]) PortBindings[port_key]=[{'HostPort': data['HostPort'][n]}] ExposedPorts[port_key]={} # 创建容器默认参数 json_create={ "Name ": 'xiaohuang', "Memory": 0, "MemorySwap": 0, "CpuShares": 512, "Cpuset": "0,1", "AttachStdin": False, "AttachStdout": True, "AttachStderr": True, "Tty": True, "OpenStdin": False, "StdinOnce": False, "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "Cmd": [data['command']], "Image": data['image'], "NetworkDisabled": False, "MacAddress": None, "SecurityOpts": [""], "ExposedPorts": ExposedPorts, "HostConfig": { "PortBindings": PortBindings, "PublishAllPorts": False, "Privileged": False, "Dns": ["8.8.8.8"], "ExtraHosts": None, "CapAdd": ["NET_ADMIN"], "CapDrop": ["MKNOD"], "RestartPolicy": { "Name": "always", "MaximumRetryCount": 0 }, "NetworkMode": "bridge", } } try: # 创建容器 res_data=docker_api('/containers/create', json_create) docker_api('/containers/create', json_create) # 修改容器名称 urls='/containers/%s/rename?name=%s' % (res_data["Id"], data["name"]) docker_api(urls, {}) except Exception as error: return HttpResponse(str(error)) return HttpResponse('ok')
def containers_action(request): containers_id=request.POST.get('containers_id') action=request.POST.get('action') try: if action == "remove_container": docker_api_del('/containers/' + containers_id, json.dumps({})) else: res_data=docker_api('/containers/%s/%s' % (containers_id, action), {}) except Exception as error: return HttpResponse(str(error)) return HttpResponse("ok")
def containers_action(request): containers_id = request.POST.get('containers_id') action = request.POST.get('action') queryset = containers.objects.get(containers_id=containers_id) code = { '204': '操作成功!', '304': '容器已经启动.', '404': '找不到这个容器,或者从来没有启动过.', '500 ': 'server error', } try: if action == "remove_container": docker_api_del('/containers/' + containers_id + '?force=1', json.dumps({}), host=queryset.host) containers.objects.filter(containers_id=containers_id).delete() else: res_data = docker_api('/containers/%s/%s' % (containers_id, action), {}, host=queryset.host) except Exception as error: status_re = re.search('(\d+)', str(error)) if status_re: status_value = status_re.group(1) if code.has_key(status_value): if status_value == '304': containers.objects.filter( containers_id=containers_id).update(status=action) return HttpResponse('ok') if status_value == '404': res_error = json.loads( docker_api_get('/containers/%s/json' % containers_id, host=queryset.host)) if res_error['State']['Error']: return HttpResponse(res_error['State']['Error']) else: return HttpResponse(code['404']) return HttpResponse(code[status_value]) return HttpResponse(str(error)) if action in ['start', 'stop']: containers.objects.filter(containers_id=containers_id).update( status=action) return HttpResponse("ok")
def containers_action(request): containers_id=request.POST.get('containers_id') action=request.POST.get('action') queryset=containers.objects.get(containers_id=containers_id) code={ '204':'操作成功!', '304':'容器已经启动.', '404':'找不到这个容器,或者从来没有启动过.', '500 ':'server error', } try: if action == "remove_container": docker_api_del('/containers/' + containers_id + '?force=1', json.dumps({}), host=queryset.host) containers.objects.filter(containers_id=containers_id).delete() else: res_data=docker_api('/containers/%s/%s' % (containers_id, action), {}, host=queryset.host) except Exception as error: status_re=re.search('(\d+)', str(error)) if status_re: status_value=status_re.group(1) if code.has_key(status_value): if status_value == '304': containers.objects.filter(containers_id=containers_id).update(status=action) return HttpResponse('ok') if status_value == '404': res_error=json.loads(docker_api_get('/containers/%s/json' % containers_id, host=queryset.host)) if res_error['State']['Error']: return HttpResponse(res_error['State']['Error']) else: return HttpResponse(code['404']) return HttpResponse(code[status_value]) return HttpResponse(str(error)) if action in ['start', 'stop']: containers.objects.filter(containers_id=containers_id).update(status=action) return HttpResponse("ok")
def create_containers(request): ''' 创建容器 ''' data=simplejson.loads(request.body) # 单个端口与多个端口映射 PortBindings={} ExposedPorts={} if isinstance(data['port'], str): port_key='%s/%s' % (data['port'], data['protocol']) PortBindings[port_key]=[{'HostPort': data['HostPort']}] ExposedPorts[port_key]={} else: for n in range(len(data['port'])): port_key='%s/%s' % (data['port'][n], data['protocol'][n]) PortBindings[port_key]=[{'HostPort': data['HostPort'][n]}] ExposedPorts[port_key]={} # 创建容器默认参数 json_create={ "Name ": 'xiaohuang', "Memory": 0, "MemorySwap": 0, "CpuShares": 512, "Cpuset": "0,1", "AttachStdin": False, "AttachStdout": True, "AttachStderr": True, "Tty": True, "OpenStdin": False, "StdinOnce": False, "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "Cmd": [data['command']], "Image": data['image'], "NetworkDisabled": False, "MacAddress": None, "SecurityOpts": [""], "ExposedPorts": ExposedPorts, "HostConfig": { "PortBindings": PortBindings, "PublishAllPorts": False, "Privileged": False, "Dns": ["8.8.8.8"], "ExtraHosts": None, "CapAdd": ["NET_ADMIN"], "CapDrop": ["MKNOD"], "RestartPolicy": { "Name": "always", "MaximumRetryCount": 0 }, "NetworkMode": "bridge", } } code={ '204':'操作成功!', '406':'impossible to attach (container not running).', '404':'no such container', '409':'conflict name already assigned.', '500 ':'server error', } try: # 创建容器 res_data=docker_api('/containers/create', json_create, host=data['vm_host']) # 修改容器名称 urls='/containers/%s/rename?name=%s' % (res_data["Id"], data["name"]) docker_api(urls, {}, host=data['vm_host']) # 添加容器 add_docker_containers('/containers/json?all=1' , data['vm_host'], c_id=res_data["Id"]) except Exception as error: status_re=re.search('(\d+)', str(error)) if status_re: status_value=status_re.group(1) if code.has_key(status_value): return HttpResponse(code[status_value]) error_tmp=str(error).replace("<", "<") error_tmp=error_tmp.replace(">", ">") return HttpResponse(str(error_tmp)) return HttpResponse('ok')
def create_containers(request): ''' 创建容器 ''' data = simplejson.loads(request.body) # 单个端口与多个端口映射 PortBindings = {} ExposedPorts = {} if isinstance(data['port'], str): port_key = '%s/%s' % (data['port'], data['protocol']) PortBindings[port_key] = [{'HostPort': data['HostPort']}] ExposedPorts[port_key] = {} else: for n in range(len(data['port'])): port_key = '%s/%s' % (data['port'][n], data['protocol'][n]) PortBindings[port_key] = [{'HostPort': data['HostPort'][n]}] ExposedPorts[port_key] = {} # 创建容器默认参数 json_create = { "Name ": 'xiaohuang', "Memory": 0, "MemorySwap": 0, "CpuShares": 512, "Cpuset": "0,1", "AttachStdin": False, "AttachStdout": True, "AttachStderr": True, "Tty": True, "OpenStdin": False, "StdinOnce": False, "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "Cmd": [data['command']], "Image": data['image'], "NetworkDisabled": False, "MacAddress": None, "SecurityOpts": [""], "ExposedPorts": ExposedPorts, "HostConfig": { "PortBindings": PortBindings, "PublishAllPorts": False, "Privileged": False, "Dns": ["8.8.8.8"], "ExtraHosts": None, "CapAdd": ["NET_ADMIN"], "CapDrop": ["MKNOD"], "RestartPolicy": { "Name": "always", "MaximumRetryCount": 0 }, "NetworkMode": "bridge", } } code = { '204': '操作成功!', '406': 'impossible to attach (container not running).', '404': 'no such container', '409': 'conflict name already assigned.', '500 ': 'server error', } try: # 创建容器 res_data = docker_api('/containers/create', json_create, host=data['vm_host']) # 修改容器名称 urls = '/containers/%s/rename?name=%s' % (res_data["Id"], data["name"]) docker_api(urls, {}, host=data['vm_host']) # 添加容器 add_docker_containers('/containers/json?all=1', data['vm_host'], c_id=res_data["Id"]) except Exception as error: status_re = re.search('(\d+)', str(error)) if status_re: status_value = status_re.group(1) if code.has_key(status_value): return HttpResponse(code[status_value]) error_tmp = str(error).replace("<", "<") error_tmp = error_tmp.replace(">", ">") return HttpResponse(str(error_tmp)) return HttpResponse('ok')