示例#1
0
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')
示例#2
0
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")
示例#3
0
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")
示例#4
0
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")
示例#5
0
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("<", "&#60;")
        error_tmp=error_tmp.replace(">", "&#62;")
        return HttpResponse(str(error_tmp))
    return HttpResponse('ok')
示例#6
0
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("<", "&#60;")
        error_tmp = error_tmp.replace(">", "&#62;")
        return HttpResponse(str(error_tmp))
    return HttpResponse('ok')