
interface dockerodeConnectOption {
	host?:string;
	port?:number;
	socketPath?:string;
	ca?:string;
	cert?:string;
	key?:string;
	rejectUnauthorized?:boolean;
	protocol?:string;
}
interface dockerAccessOpt {
	all:boolean;
}
interface containerHostConfig {
	NetworkMode:string;
}
interface dockerContainerPort {
	IP:string;
	PrivatePort:number;
	PublicPort:number;
	Type:string;
}
interface dockerRegistryConfig {
	InsecureRegistryCIDRs:string[];
	IndexConfigs:Object;
	Mirrors:any;
}
interface dockerInfoData {
	ID:string;
	Containers:number;
	Images:number;
	Driver:string;
	DriverStatus:string[][];
	MemoryLimit:boolean;
	SwapLimit:boolean;
	CpuCfsPeriod:boolean;
	CpuCfsQuota:boolean;
	IPv4Forwarding:boolean;
	BridgeNfIptables:boolean;
	BridgeNfIp6tables:boolean;
	Debug:boolean;
	NFd:number;
	OomKillDisable:boolean;
	NGoroutines:number;
	SystemTime:string;
	ExecutionDriver:string;
	LoggingDriver:string;
	NEventsListener:number;
	KernelVersion:string;
	OperatingSystem:string;
	IndexServerAddress:string;
	RegistryConfig:dockerRegistryConfig;
	InitSha1:string;
	InitPath:string;
	NCPU:number;
	MemTotal:number;
	DockerRootDir:string;
	HttpProxy:string;
	HttpsProxy:string;
	NoProxy:string;
	Name:string;
	Labels:string;
	ExperimentalBuild:boolean;
	ServerVersion:string;
	ClusterStore:string;
	ClusterAdvertise:string;
	
}
interface DockerContainerData {
	Id:string;
	Names:string[];
	Image:string;
	ImageID:string;
	Command:string;
	Created:number;
	Ports:dockerContainerPort[];
	Labels:any;
	Status:string;
	HostConfig:containerHostConfig;
}
interface dockerListCallBack {
	err?:any;
	containers?:DockerContainerData;
}
interface dockerInfoCallBack {
	err?:any;
	data?:dockerInfoData;
}
interface dockerversionData {
	Version:string;
	ApiVersion:string;
	GitCommit:string;
	GoVersion:string;
	Os:string;
	Arch:string;
	KernelVersion:string;
	BuildTime:string;
}
interface dockerVersionCallBack {
	err?:any;
	data?:dockerversionData;
}

interface dockerContainerInspectDataState{
	Status:string;
	Running:boolean;
	Paused:boolean;
	Restarting:boolean;
	OOMKilled:boolean;
	Dead:boolean;
	Pid:number;
	ExitCode:number;
	Error:string;
	StartedAt:string;
	FinishedAt:string;
	
}
interface dockerRestartPolicy {
	Name:string;
	MaximumRetryCount:number;
}
interface dockerLogConfig {
	Type:string;
	Config:any;
}
interface dockerHostInfo {
	HostIp:string;
	HostPort:string;
}
interface dockerContainerInspectDataHostConfig {
	Binds:string[];
	ContainerIDFile:string;
	LxcConf:any[];
	Memory:number;
	MemoryReservation:number;
	MemorySwap:number;
	KernelMemory:number;
	CpuShares:number;
	CpuPeriod:number;
	CpusetCpus:string;
	CpusetMems:string;
	CpuQuota:number;
	BlkioWeight:number;
	OomKillDisable:boolean;
	MemorySwappiness:number;
	Privileged:boolean;
	PortBindings:Map<string,dockerHostInfo>;
	Links:any;
	PublishAllPorts:boolean;
	Dns:string[];
	DnsOptions:string[];
	DnsSearch:string[];
	ExtraHosts:any;
	VolumesFrom:any;
	Devices:any[];
	NetworkMode:string;
	IpcMode:string;
	PidMode:string;
	UTSMode:string;
	CapAdd:any;
	CapDrop:any;
	GroupAdd:any;
	RestartPolicy:dockerRestartPolicy;
	SecurityOpt:any;
	ReadonlyRootfs:boolean;
	Ulimits:any;
	LogConfig:dockerLogConfig;
	CgroupParent:string;
	ConsoleSize:number[];
	VolumeDriver:string;
	
}
interface dockerGraphDriverData {
	LowerDir:string;
	MergedDir:string;
	UpperDir:string;
	WorkDir:string;
}
interface dockerGraphDriver {
	Name:string;
	Data:dockerGraphDriverData;
}
interface dockerMounts {
	Source:string;
	Destination:string;
	Mode:string;
	RW:boolean;
}
interface dockerContainerInspectConfig{
	Hostname:string;
	Domainname:string;
	User:string;
	AttachStdin:boolean;
	AttachStdout:boolean;
	AttachStderr:boolean;
	ExposedPorts:Map<string, dockerHostInfo>;
	Tty:boolean;
	OpenStdin:boolean;
	StdinOnce:boolean;
	Env:string[];
	Cmd:string[];
	Image:string;
	Volumes:any;
	WorkingDir:string;
	Entrypoint:any;
	OnBuild:any;
	Labels:Object;
	StopSignal:string;
}
interface dockerContainerInspectNetworkSettingsNetworksBridge {
	EndpointID:string;
	Gateway:string;
	IPAddress:string;
	IPPrefixLen:number;
	IPv6Gateway:string;
	GlobalIPv6Address:string;
	GlobalIPv6PrefixLen:number;
	MacAddress:string;
}
interface dockerContainerInspectNetworkSettingsNetworks {
	bridge:dockerContainerInspectNetworkSettingsNetworksBridge;
}
interface dockerContainerInspectNetworkSettings {
	Bridge:string;
	SandboxID:string;
	HairpinMode:boolean;
	LinkLocalIPv6Address:string;
	LinkLocalIPv6PrefixLen:number;
	Ports:Map<string, dockerHostInfo>;
	SandboxKey:string;
	SecondaryIPAddresses:any;
	SecondaryIPv6Addresses:any;
	EndpointID:string;
	Gateway:string;
	GlobalIPv6Address:string;
	GlobalIPv6PrefixLen:number;
	IPAddress:string;
	IPPrefixLen:number;
	IPv6Gateway:string;
	MacAddress:string;
	Networks:dockerContainerInspectNetworkSettingsNetworks;
}
interface dockerContainerInspectData {
	Id?:string;
	Created?:string;
	Path?:string;
	Args?:string[];
	State?:dockerContainerInspectDataState;
	Image:string;
	Cmd?:string[];
	Env?:string[];
	ResolvConfPath?:string;
	HostnamePath?:string;
	HostsPath?:string;
	LogPath?:string;
	name?:string;
	Name?:string;
	RestartCount?:number;
	Driver?:string;
	ExecDriver?:string;
	MountLabel?:string;
	ProcessLabel?:string;
	AppArmorProfile?:string;
	ExecIDs?:any;
	HostConfig?:dockerContainerInspectDataHostConfig;
	GraphDriver?:dockerGraphDriver;
	Mounts?:dockerMounts[];
	Config?:dockerContainerInspectConfig;
	NetworkSettings?:dockerContainerInspectNetworkSettings;
}
interface dockerode {
	new(option?:dockerodeConnectOption):dockerode;
	listContainers(opt:dockerAccessOpt, cb:dockerListCallBack):void;
	info(cb:dockerInfoCallBack):void;
	run(image:string, cmd, streamo, createOptions, startOptions, callback):EventListener;
	version(cb:dockerVersionCallBack):void;
	loadImage(file:string, opts?:any, callback?:any):void;
	getContainer(id:string):dockerContainer;
	createContainer(opt:dockerContainerInspectData,cb:(err?:any, container?:dockerContainer)=>void ):void;
	pull(repoTag:string, auth, callback):void;
	listImages(opt,cb:(err, data)=>void):void;
	createImage(auth, opts, callback):void;
}
interface dockerContainer {
	inspect(cb:(err?:any, data?:dockerContainerInspectData)=>void);
	logs(opt?,cb?:(err?:any,data?)=>void):void;
	start(cb:(err?:any, data?:any)=>void):void;
    wait(cb:(err?, data?) => void):void;
    remove(cb:(err?, data?) => void):void;
}
declare module "dockerode" {
	var ext:dockerode;
	export = ext;
}