docker-api-nodejs
Version:
Docker API for NodeJS
1,688 lines (1,663 loc) • 62 kB
TypeScript
import * as http from 'http';
import http__default from 'http';
import { Socket } from 'net';
type ModemDialMethod = "GET" | "POST" | "HEAD" | "PUT" | "DELETE" | "PATCH";
type ModemDialResponseResult = object | null;
type ModemDialStreamResult = http__default.IncomingMessage;
type ModemDialResult = ModemDialResponseResult | ModemDialStreamResult | Socket;
interface ModemDialOptions {
path: string;
method: ModemDialMethod;
headers?: Map<string, string>;
query?: Map<string, Array<string>>;
body?: object | string;
isStream?: boolean;
}
declare class Modem {
private static readonly version;
private static readonly responseStreamContentType;
private readonly socketPath;
constructor(socketPath: string);
private static responseIsStream;
private static getResponseContentHandler;
private static getQueryString;
dial(options: ModemDialOptions): Promise<ModemDialResult>;
}
declare abstract class Handle {
protected readonly modem: Modem;
readonly id: string;
constructor(modem: Modem, id: string);
}
interface Stackable {
shouldThrowStackError(): boolean;
}
type WITHOUT<T extends any> = {
[P in keyof T]?: undefined;
};
type XOR<T extends any, U extends any> = (WITHOUT<T> & U) | (WITHOUT<U> & T);
/**
* @see https://github.com/microsoft/TypeScript/issues/14094#issuecomment-723571692
*/
type ALLXOR<T extends Array<any>> = T extends [infer Only] ? Only : T extends [infer A, infer B, ...infer Rest] ? ALLXOR<[XOR<A, B>, ...Rest]> : never;
type DockerOptions = {
[option: string]: string;
};
type DockerLabels = {
[label: string]: string;
};
type ObjectVersion = {
Index: number;
};
interface SwarmBase<IDType> {
ID: IDType;
Version: ObjectVersion;
CreatedAt: string;
UpdatedAt: string;
}
type MountType = "bind" | "volume" | "tmpfs" | "npipe" | "cluster";
interface DockerResouceBase {
NanoCPUs?: number;
MemoryBytes?: number;
}
interface Limit extends DockerResouceBase {
Pids?: number;
}
interface GenericResourcesSpec<ValueType> {
Kind: string;
Value: ValueType;
}
type NamedResourceSpec = {
NamedResourceSpec: GenericResourcesSpec<string>;
};
type DiscreteResourceSpec = {
DiscreteResourceSpec: GenericResourcesSpec<number>;
};
type GenericResource = XOR<NamedResourceSpec, DiscreteResourceSpec>;
interface ResourceObject extends DockerResouceBase {
GenericResources?: Array<GenericResource>;
}
type DockerResources = {
Limits?: Limit;
Reservations?: ResourceObject;
};
type Platform = {
Architecture: string;
OS: string;
};
type Driver = {
Name: string;
Options?: DockerOptions;
};
type NetworkAttachementConfig = {
Target: string;
Aliases?: Array<string>;
DriverOpts?: DockerOptions;
};
type PortType = "tcp" | "udp" | "sctp";
type Port = {
IP?: string;
PrivatePort: number;
PublicPort?: number;
Type: PortType;
};
type EndpointPortConfigPublishMode = "ingress" | "host";
type EndpointPortConfig = {
Name?: string;
Protocol: PortType;
TargetPort: number;
PublishedPort: number;
PublishMode: EndpointPortConfigPublishMode;
};
type PortStatus = {
Ports: Array<EndpointPortConfig>;
};
type EndpointSpecMode = "vip" | "dnsrr";
type EndpointSpec = {
Mode: EndpointSpecMode;
Ports: Array<EndpointPortConfig>;
};
type PluginPrivilege = {
Name: string;
Description: string;
Value: Array<string>;
};
type MountBindOptionsPropagation = "private" | "rprivate" | "shared" | "rshared" | "slave" | "rslave";
type MountBindOptions = {
Propagation: MountBindOptionsPropagation;
NonRecursive: boolean;
CreateMountpoint: boolean;
ReadOnlyNonRecursive: boolean;
ReadOnlyForceRecursive: boolean;
};
type MountVolumeOptionsDriverConfig = {
Name: string;
Options: DockerOptions;
};
type MountVolumeOptions = {
NoCopy: boolean;
Labels: DockerLabels;
DriverConfig: MountVolumeOptionsDriverConfig;
};
type MountTmpfsOptions = {
SizeBytes: number;
Mode: number;
};
type MountConsistency = "default" | "consistent" | "cached" | "delegated";
type Mount = {
Target: string;
Source: string;
Type: MountType;
ReadOnly: boolean;
Consistency: MountConsistency;
BindOptions?: MountBindOptions;
VolumeOptions?: MountVolumeOptions;
TmpfsOptions?: MountTmpfsOptions;
};
type MountPoint = {
Type: MountType;
Name: string;
Source: string;
Destination: string;
Driver: string;
Mode: string;
RW: boolean;
Propagation: string;
};
type HealthCheckResult = {
Start: string;
End: string;
ExitCode: number;
Output: string;
};
type HealthStatus = "none" | "starting" | "healthy" | "unhealthy";
type Health = {
Status: HealthStatus;
FailingStreak: number;
Log: Array<HealthCheckResult>;
};
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Service/operation/ServiceList
*/
type HealthConfig = {
Test: Array<string>;
Interval: number;
Timeout: number;
Retries: number;
StartPeriod: number;
StartInterval: number;
};
type IPAMConfigAuxiliaryAdresses = {
[name: string]: string;
};
type IPAMConfig = {
Subnet: string;
IPRange: string;
Gateway: string;
AuxiliaryAdresses?: IPAMConfigAuxiliaryAdresses;
};
type IPAM = {
Driver: string;
Config: Array<IPAMConfig> | null;
Options: DockerOptions;
};
type EndpointIPAMConfig = {
IPv4Address: string;
IPv6Address: string;
LinkLocalIPs: Array<string>;
};
type EndpointSettings = {
IPAMConfig: EndpointIPAMConfig | null;
Links: Array<string>;
MacAddress: string;
Aliases: Array<string>;
NetworkID: string;
EndpointID: string;
Gateway: string;
IPAddress: string;
IPPrefixLen: number;
IPv6Gateway: string;
GlobalIPv6Address: string;
GlobalIPv6PrefixLen: number;
DriverOpts: DockerOptions;
DNSNames: Array<string>;
};
type Topology = {
[name: string]: string;
};
type EngineDescriptionPlugin = {
Type: string;
Name: string;
};
type EngineDescription = {
EngineVersion: string;
Labels: DockerLabels;
Plugins: Array<EngineDescriptionPlugin>;
};
type TLSInfo = {
TrustRoot: string;
CertIssuerSubject: string;
CertIssuerPublicKey: string;
};
type RuntimeStatus = {
[name: string]: string;
};
type Runtime = {
path: string;
runtimeArgs: Array<string> | null;
status: RuntimeStatus;
};
type PeerNode = {
NodeID: string;
Addr: string;
};
type Isolation = "default" | "process" | "hyperv";
type Commit = {
ID: string;
Expected: string;
};
type BuildCacheType = "internal" | "frontend" | "source.local" | "source.git.checkout" | "exec.cachemount" | "regular";
type BuildCache = {
ID: string;
Parent: string | null;
Parents: Array<string> | null;
Type: BuildCacheType;
Description: string;
InUse: boolean;
Shared: boolean;
Size: number;
CreatedAt: string;
LastUsedAt: string | null;
UsageCount: number;
};
type HostConfigBlkioWeightDevice = {
Path: string;
Weight: number;
};
type ThrottleDevice = {
Path: string;
Rate: number;
};
type DeviceMapping = {
PathOnHost: string;
PathInContainer: string;
CgroupPermissions: string;
};
type DeviceRequest = {
Driver: string;
Count: number;
DeviceIDs: Array<string>;
Capabilities: Array<string>;
Options: DockerOptions;
};
type HostConfigUlimit = {
Name: string;
Soft: number;
Hard: number;
};
type LogConfigType = "json-file" | "syslog" | "journald" | "gelf" | "fluentd" | "awslogs" | "splunk" | "etwlogs" | "none";
type LogConfig = {
Type: LogConfigType;
Config: DockerOptions;
};
type PortBinding = {
HostIp: string;
HostPort: string;
};
type PortMap = {
[name: string]: PortBinding;
};
type RestartPolicyName = "" | "no" | "always" | "unless-stopped" | "on-failure";
type RestartPolicy = {
Name: RestartPolicyName;
MaximumRetryCount: number;
};
type HostConfigAnnotations = {
[name: string]: string;
};
type HostConfigCGroupNSMode = "private" | "host";
type HostConfigIpcMode = "none" | "private" | "shareable" | "host";
type HostConfigBase = {
CpuShares: number;
Memory: number;
CgroupParent: string;
BlkioWeight: number;
BlkioWeightDevice: Array<HostConfigBlkioWeightDevice>;
BlkioDeviceReadBps: Array<ThrottleDevice>;
BlkioDeviceWriteBps: Array<ThrottleDevice>;
BlkioDeviceReadIOps: Array<ThrottleDevice>;
BlkioDeviceWriteIOps: Array<ThrottleDevice>;
CpuPeriod: number;
CpuQuota: number;
CpuRealtimePeriod: number;
CpuRealtimeRuntime: number;
CpusetCpus: string;
CpusetMems: string;
Devices: Array<DeviceMapping>;
DeviceCgroupRules: Array<string>;
DeviceRequests: Array<DeviceRequest>;
KernelMemoryTCP: number;
MemoryReservation: number;
MemorySwap: number;
MemorySwappiness: number;
NanoCpus: number;
OomKillDisable: boolean;
Init: boolean | null;
PidsLimit: number | null;
Ulimits: Array<HostConfigUlimit>;
CpuCount: number;
CpuPercent: number;
IOMaximumIOps: number;
IOMaximumBandwidth: number;
};
type HostConfig = HostConfigBase & {
Binds: Array<string>;
ContainerIDFile: string;
LogConfig: LogConfig;
NetworkMode: string;
PortBindings: PortMap;
RestartPolicy: RestartPolicy;
AutoRemove: boolean;
VolumeDriver: string;
VolumesFrom: Array<string>;
Mounts: Array<Mount>;
ConsoleSize: Array<number> | null;
Annotations: HostConfigAnnotations;
CapAdd: Array<string>;
CapDrop: Array<string>;
CgroupnsMode: HostConfigCGroupNSMode;
Dns: Array<string>;
DnsOptions: Array<string>;
DnsSearch: Array<string>;
ExtraHosts: Array<string>;
GroupAdd: Array<string>;
IpcMode: HostConfigIpcMode;
Cgroup: string;
Links: Array<string>;
OomScoreAdj: number;
PidMode: string;
Privileged: boolean;
PublishAllPorts: boolean;
ReadonlyRootfs: boolean;
SecurityOpt: Array<string>;
StorageOpt: DockerOptions;
Tmpfs: DockerOptions;
UTSMode: string;
UsernsMode: string;
ShmSize: number;
Sysctls: DockerOptions;
Runtime: string;
Isolation: Isolation;
MaskedPaths: Array<string>;
ReadonlyPaths: Array<string>;
};
type GraphDriverData = {
Name: string;
Data: DockerOptions;
};
type Address = {
Addr: string;
PrefixLen: number;
};
type DockerEventType = "builder" | "config" | "container" | "deamon" | "image" | "network" | "node" | "plugin" | "secret" | "service" | "volume";
type DockerEventScope = "local" | "swarm";
type DockerEventActorAttributes = {
[Name: string]: string;
};
type DockerEvent = {
Type: DockerEventType;
Action: string;
Actor: {
ID: string;
Attributes: DockerEventActorAttributes;
};
scope: DockerEventScope;
time: number;
timeNano: number;
};
type ConfigId = string;
type ConfigSpec = {
Name: string;
Labels?: DockerLabels;
Data: string;
Templating?: Driver;
};
interface Config extends SwarmBase<ConfigId> {
Spec: ConfigSpec;
}
declare class ConfigHandle extends Handle implements Stackable {
inspect(): Promise<Config>;
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Config/operation/ConfigUpdate
* @param spec
*/
update(spec: ConfigSpec): Promise<void>;
remove(): Promise<void>;
shouldThrowStackError(): boolean;
static isPartOfStack(config: Config): boolean | undefined;
static fromConfig(modem: Modem, config: Config): ConfigHandle;
}
type ConfigListFilterType = "id" | "label" | "name" | "names";
type ConfigListFilters = Map<ConfigListFilterType, Array<string>>;
type ConfigListResult = Array<Config>;
type ConfigListQueryOptions = {
filters?: ConfigListFilters;
};
declare class Configs {
static list(modem: Modem, queryOptions?: ConfigListQueryOptions): Promise<ConfigListResult>;
static create(modem: Modem, spec: ConfigSpec): Promise<ConfigHandle>;
static exists(modem: Modem, name: string): Promise<{
exists: boolean;
handle: ConfigHandle | undefined;
}>;
static getHandle(modem: Modem, id: ConfigId): ConfigHandle;
}
type ContainerId = string;
type ContainerHostConfig = {
NetworkMode?: string;
};
type ContainerSummaryNetworkSettings = {
Networks: {
[name: string]: EndpointSettings;
};
};
interface ContainerBase {
Id: ContainerId;
Image: string;
Mounts: Array<MountPoint>;
}
interface ContainerSummary extends ContainerBase {
Names: Array<string>;
ImageID: string;
Command: string;
Created: number;
Ports: Array<Port>;
SizeRw: number;
SizeRootFs: number;
Labels: DockerLabels;
State: string;
Status: string;
HostConfig: ContainerHostConfig;
NetworkSettings: ContainerSummaryNetworkSettings;
}
type ContainerStatus = {
ContainerID: ContainerId;
PID: string;
ExitCode: number;
};
/**
* Format: <port>/<tcp|udp|sctp>: {}
*/
type ContainerSpecExposedPorts = {
[port: string]: object;
};
type ContainerVolumes = {
[name: string]: object;
};
type ContainerSpecNetworkingConfig = {
EndpointsConfig: EndpointSettings;
};
type ContainerConfig = {
Hostname?: string;
Domainname?: string;
User?: string;
AttachStdin?: boolean;
AttachStdout?: boolean;
AttachStderr?: boolean;
ExposedPorts?: ContainerSpecExposedPorts;
Tty?: boolean;
OpenStdin?: boolean;
StdinOnce?: boolean;
Env?: Array<string>;
Cmd?: Array<string>;
Healthcheck?: HealthConfig;
ArgsEscaped?: boolean | null;
Image: string;
Volumes?: ContainerVolumes;
WorkingDir?: string;
Entrypoint?: Array<string>;
NetworkDisabled?: boolean | null;
MacAddress?: string | null;
OnBuild?: Array<string> | null;
Labels?: DockerLabels;
StopSignal?: string | null;
StopTimeout?: number | null;
Shell?: Array<string> | null;
};
type ContainerSpec = ContainerConfig & {
HostConfig?: ContainerHostConfig;
NetworkingConfig?: ContainerSpecNetworkingConfig;
};
type ContainerStateStatus = "created" | "running" | "paused" | "restarting" | "removing" | "exited" | "dead";
type ContainerState = {
Status: ContainerStateStatus;
Running: boolean;
Paused: boolean;
Restarting: boolean;
OOMKilled: boolean;
Dead: boolean;
Pid: number;
ExitCode: number;
Error: string;
StartedAt: string;
FinishedAt: string;
Health: Health;
};
type ContainerNetworkSettings = ContainerSummaryNetworkSettings & {
Bridge: string;
SandboxID: string;
HairpinMode: boolean;
LinkLocalIPv6Address: string;
LinkLocalIPv6PrefixLen: number;
Ports: PortMap;
SandboxKey: string;
SecondaryIPAddresses: Array<Address> | null;
SecondaryIPv6Addresses: Array<Address> | null;
};
interface Container extends ContainerBase {
Created: string;
Path: string;
Args: Array<string>;
State: ContainerState;
ResolvConfPath: string;
HostnamePath: string;
HostsPath: string;
LogPath: string;
Name: string;
RestartCount: number;
Driver: string;
Platform: string;
MountLabel: string;
ProcessLabel: string;
AppArmorProfile: string;
ExecIds: Array<string> | null;
HostConfig: HostConfig;
GraphDriver: GraphDriverData;
SizeRw: number;
SizeRootFs: number;
Mounts: Array<MountPoint>;
Config: ContainerConfig;
NetworkSettings: ContainerNetworkSettings;
}
type ContainerUpdateConfig = HostConfigBase & {
RestartPolicy: RestartPolicy;
};
type ContainerInspectQueryOptions = {
size?: boolean;
};
type ContainerListProcessesQueryOptions = {
ps_args?: string;
};
type ContainerLogsQueryOptions = {
follow?: boolean;
stdout?: boolean;
stderr?: boolean;
since?: number;
until?: number;
timestamps?: boolean;
tail?: "all" | number;
};
type ContainerListProcessesResult = {
Titles: Array<string>;
Processes: Array<Array<string>>;
};
type ContainerChangesResult = Array<{
Path: string;
Kind: 0 | 1 | 2;
}>;
type ContainerStatsQueryOptions = {
stream?: boolean;
/**
* Has to be used with stream=false
* Returns values immediately instead of waiting 2 cycles
*/
oneShot?: boolean;
};
type ContainerResizeQueryOptions = {
w: number;
h: number;
};
type ContainerStartQueryOptions = {
detachKeys?: string;
};
type ContainerKillQueryOptions = {
signal?: string;
};
type ContainerStopQueryOptions = ContainerKillQueryOptions & {
t?: number;
};
type ContainerRenameQueryOptions = {
name: string;
};
type ContainerWaitQueryOptions = {
condition?: "not-running" | "next-exit" | "removed";
};
type ContainerRemoveQueryOptions = {
v?: boolean;
force?: boolean;
link?: boolean;
};
type ContainerUpdateResult = {
Warnings: Array<string>;
};
declare class ContainerHandle extends Handle {
inspect(queryOptions?: ContainerInspectQueryOptions): Promise<Container>;
listProcesses(queryOptions?: ContainerListProcessesQueryOptions): Promise<ContainerListProcessesResult>;
getLogs(queryOptions?: ContainerLogsQueryOptions): Promise<http.IncomingMessage>;
changes(): Promise<ContainerChangesResult>;
export(): Promise<http.IncomingMessage>;
stats(queryOptions?: ContainerStatsQueryOptions): Promise<http.IncomingMessage>;
resize(queryOptions: ContainerResizeQueryOptions): Promise<ModemDialResult>;
start(queryOptions?: ContainerStartQueryOptions): Promise<ModemDialResult>;
stop(queryOptions?: ContainerStopQueryOptions): Promise<ModemDialResult>;
restart(queryOptions?: ContainerStopQueryOptions): Promise<ModemDialResult>;
kill(queryOptions?: ContainerKillQueryOptions): Promise<ModemDialResult>;
update(updateConfig: ContainerUpdateConfig): Promise<ContainerUpdateResult>;
rename(queryOptions: ContainerRenameQueryOptions): Promise<ModemDialResult>;
pause(): Promise<ModemDialResult>;
unpause(): Promise<ModemDialResult>;
wait(queryOptions?: ContainerWaitQueryOptions): Promise<ModemDialResult>;
remove(queryOptions?: ContainerRemoveQueryOptions): Promise<void>;
static fromContainer(modem: Modem, container: ContainerSummary): ContainerHandle;
}
type ContainerListFilterType = "ancestor" | "before" | "expose" | "exited" | "isolation" | "is-task" | "label" | "name" | "network" | "publish" | "since" | "status" | "volume";
type ContainerListFilters = Map<ContainerListFilterType, Array<string>>;
type ContainerPruneFilterType = "until" | "label";
type ContainerPruneFilters = Map<ContainerPruneFilterType, Array<string>>;
type ContainerListQueryOptions = {
all?: boolean;
limit?: number;
size?: boolean;
filters?: ContainerListFilters;
};
type ContainerPruneQueryOptions = {
filters?: ContainerPruneFilters;
};
type ContainerListResult = Array<ContainerSummary>;
type ContainerPruneResult = {
ContainersDeleted: Array<string>;
SpaceReclaimed: number;
};
declare class Containers {
static list(modem: Modem, queryOptions?: ContainerListQueryOptions): Promise<ContainerListResult>;
static create(modem: Modem, spec: ContainerSpec): Promise<ContainerHandle>;
static prune(modem: Modem, queryOptions?: ContainerPruneQueryOptions): Promise<ContainerPruneResult>;
static getHandle(modem: Modem, id: ContainerId): ContainerHandle;
}
type ImageId = string;
type ImageConfig = ContainerConfig;
interface ImageBase {
Id: ImageId;
ParentId: ImageId;
RepoTags: Array<string>;
RepoDigests: Array<string>;
Created: number;
Size: number;
VirtualSize?: number;
}
interface ImageSummary extends ImageBase {
SharedSize: number;
Labels: DockerLabels;
Containers: number;
}
type ImageRootFS = {
Type: string;
Layers: Array<string>;
};
type ImageMetadata = {
LastTagTime: string | null;
};
interface Image extends ImageBase {
Comment: string;
Container: string;
ContainerConfig: ContainerConfig;
DockerVersion: string;
Author: string;
Config: ImageConfig;
Architecture: string;
Variant: string;
Os: string;
OsVersion: string;
GraphDriver: GraphDriverData;
RootFS: ImageRootFS;
Metadata: ImageMetadata;
}
type ImageLayer = {
Id: string;
Created: number;
CreatedBy: string;
Tags: Array<string>;
Size: number;
Comment: string;
};
type ImageHistoryResult = Array<ImageLayer>;
type ImagePushQueryOptions = {
tag?: string;
};
type ImageTagQueryOptions = {
repo: string;
tag: string;
};
type ImageRemoveQueryOptions = {
force?: boolean;
noprune?: false;
};
declare class ImageHandle extends Handle {
inspect(): Promise<Image>;
history(): Promise<ImageHistoryResult>;
push(queryOptions?: ImagePushQueryOptions, registryAuth?: string): Promise<ModemDialResult>;
tag(queryOptions: ImageTagQueryOptions): Promise<ModemDialResult>;
remove(queryOptions?: ImageRemoveQueryOptions): Promise<void>;
static fromImage(modem: Modem, image: Image): ImageHandle;
}
declare class HandleLogWrapper<HandleType extends Handle> {
private readonly handle;
private readonly logStream?;
private readonly logChunks;
constructor(handle: HandleType, logStream?: ModemDialStreamResult);
drainLogStream(): Promise<void>;
get Handle(): HandleType;
get LogChunks(): string[];
}
type ImageListFilterType = "before" | "dangling" | "label" | "reference" | "since" | "until";
type ImageBuildPruneFilterType = "until" | "id" | "parent" | "type" | "description" | "inuse" | "shared" | "private";
type ImageSearchFilterTypes = "is-official" | "stars";
type ImagePruneFilterType = "dangling" | "until" | "label";
type ImageListFilters = Map<ImageListFilterType, Array<string>>;
type ImageBuildPruneFilters = Map<ImageBuildPruneFilterType, Array<string>>;
type ImageSearchFilters = Map<ImageSearchFilterTypes, Array<string>>;
type ImagePruneFilters = Map<ImagePruneFilterType, Array<string>>;
type ImageListQueryOptions = {
all?: boolean;
filters?: ImageListFilters;
sharedSize?: boolean;
digests?: boolean;
};
type ImageBuildPruneQueryOptions = {
keepStorage: number;
all: boolean;
filters?: ImageBuildPruneFilters;
};
type ImagePullQueryOptions = {
fromImage: string;
tag?: string;
changes?: Array<string>;
platform?: string;
};
type ImageImportQueryOptions = {
fromSrc: string;
repo: string;
message?: string;
changes?: Array<string>;
platform?: string;
};
type ImageSearchQueryOptions = {
term: string;
limit: number;
filters?: ImageSearchFilters;
};
type ImageCommitQueryOptions = {
container?: string;
repo: string;
tag?: string;
comment?: string;
author?: string;
pause?: boolean;
changes?: string;
};
type ImageListResult = Array<ImageSummary>;
type ImageBuildPruneResult = {
CachesDeleted: Array<string>;
SpaceReclaimed: number;
};
type ImagePruneResultImageDeleted = {
Untagged: string;
Deleted: string;
};
type ImageSearchResult = Array<{
description: string;
is_official: boolean;
name: string;
star_count: number;
}>;
type ImagePruneResult = {
ImagesDeleted: Array<ImagePruneResultImageDeleted>;
SpaceReclaimed: number;
};
type ImageCommitResult = {
Id: string;
};
declare class Images {
static list(modem: Modem, queryOptions?: ImageListQueryOptions): Promise<ImageListResult>;
static pruneBuilderCache(modem: Modem, queryOptions: ImageBuildPruneQueryOptions): Promise<ImageBuildPruneResult>;
/**
* @see https://docs.docker.com/reference/api/engine/version/v1.44/#tag/Image/operation/ImageCreate
*
* @param modem
* @param queryOptions
* @param registryAuth
* @returns
*/
static pull(modem: Modem, queryOptions: ImagePullQueryOptions, registryAuth?: string): Promise<HandleLogWrapper<ImageHandle>>;
/**
* @see https://docs.docker.com/reference/api/engine/version/v1.44/#tag/Image/operation/ImageCreate
*
* @param modem
* @param queryOptions
* @param image
* @returns
*/
static import(modem: Modem, queryOptions: ImageImportQueryOptions, image?: string): Promise<HandleLogWrapper<ImageHandle>>;
static search(modem: Modem, queryOptions: ImageSearchQueryOptions): Promise<ImageSearchResult>;
static prune(modem: Modem, filters?: ImagePruneFilters): Promise<ImagePruneResult>;
/**
* Creates a new image based on a container configuration
* @param modem the modem to communicate with docker
* @param queryOptions query specific options
* @param containerConfig configuration of the container for the image
*/
static commit(modem: Modem, queryOptions: ImageCommitQueryOptions, containerConfig?: ContainerConfig): Promise<ImageCommitResult>;
static getHandle(modem: Modem, id: ImageId): ImageHandle;
}
type NetworkId = string;
type NetworkScope = "local" | "swarm";
type NetworkContainer = {
Name: string;
EndpointID: string;
MacAddress: string;
IPv4Address: string;
IPv6Address: string;
};
type NetworkContainers = {
[name: string]: NetworkContainer;
};
type NetworkConfigFrom = {
Network: NetworkId;
};
interface NetworkSpec {
Name: string;
Driver?: string;
EnableIPv6?: boolean;
IPAM?: IPAM;
Internal?: boolean;
Attachable?: boolean;
Ingress?: boolean;
Options?: DockerOptions;
Labels?: DockerLabels;
Scope?: NetworkScope;
ConfigOnly?: boolean;
ConfigFrom?: NetworkConfigFrom;
}
interface Network extends NetworkSpec {
Id: NetworkId;
Created: string;
Containers: NetworkContainers;
}
type NetworkInspectQueryOptions = {
verbose?: boolean;
scope?: NetworkScope;
};
type NetworkConnectContainerConfig = {
Container: string;
EndpointConfig: EndpointSettings;
};
type NetworkDisconnectContainerConfig = {
Container: string;
Force: boolean;
};
declare class NetworkHandle extends Handle implements Stackable {
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Network/operation/NetworkInspect
* @param queryOptions query options to use
*/
inspect(queryOptions?: NetworkInspectQueryOptions): Promise<Network>;
remove(): Promise<void>;
connectContainer(connectConfig: NetworkConnectContainerConfig): Promise<ModemDialResult>;
disconnectContainer(disconnectConfig: NetworkDisconnectContainerConfig): Promise<ModemDialResult>;
shouldThrowStackError(): boolean;
static isPartOfStack(network: Network): boolean | undefined;
static fromNetwork(modem: Modem, network: Network): NetworkHandle;
}
type NetworkListFilterType = "dangling" | "driver" | "id" | "label" | "name" | "scope" | "type";
type NetworkPruneFilterType = "until" | "label";
type NetworkListFilters = Map<NetworkListFilterType, Array<string>>;
type NetworkPruneFilters = Map<NetworkPruneFilterType, Array<string>>;
type NetworkListQueryOptions = {
filters?: NetworkListFilters;
};
type NetworkPruneQueryOptions = {
filters?: NetworkPruneFilters;
};
type NetworkListResult = Array<Network>;
type NetworkPruneResult = {
NetworksDeleted: Array<string>;
};
declare class Networks {
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Network/operation/NetworkList
*/
static list(modem: Modem, queryOptions?: NetworkListQueryOptions): Promise<NetworkListResult>;
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Network/operation/NetworkCreate
*
* @param modem the modem to use
* @param spec the spec to use to create the network
*/
static create(modem: Modem, spec: NetworkSpec): Promise<NetworkHandle>;
static existsCluster(modem: Modem, name: string): Promise<{
exists: boolean;
handle: NetworkHandle | undefined;
}>;
static prune(modem: Modem, queryOptions?: NetworkPruneQueryOptions): Promise<NetworkPruneResult>;
static getHandle(modem: Modem, id: NetworkId): NetworkHandle;
}
type NodeId = string;
type NodeRole = "worker" | "manager";
type NodeAvailability = "active" | "pause" | "drain";
type NodeSpec = {
Name: string;
Labels?: DockerLabels;
Role: NodeRole;
Availability: NodeAvailability;
};
type NodeDescription = {
Hostname: string;
Platform: Platform;
Resources: ResourceObject;
Engine: EngineDescription;
TLSInfo: TLSInfo;
};
type NodeState = "unknown" | "down" | "ready" | "disconnected";
type NodeStatus = {
State: NodeState;
Message: string;
Addr: string;
};
type NodeManagerStatusReachability = "unknown" | "unreachable" | "reachable";
type NodeManagerStatus = {
Leader: boolean;
Reachability: NodeManagerStatusReachability;
Addr: string;
};
interface Node extends SwarmBase<NodeId> {
Spec: NodeSpec;
Description: NodeDescription;
Status: NodeStatus;
ManagerStatus: NodeManagerStatus;
}
type NodeRemoveQueryOptions = {
force?: boolean;
};
declare class NodeHandle extends Handle {
inspect(): Promise<Node>;
update(newSpec: NodeSpec): Promise<void>;
remove(queryOptions: NodeRemoveQueryOptions): Promise<void>;
static fromNode(modem: Modem, node: Node): NodeHandle;
}
type NodeListFilterType = "id" | "label" | "membership" | "name" | "node.label" | "role";
type NodeListFilters = Map<NodeListFilterType, Array<string>>;
type NodeListResult = Array<Node>;
type NodeListQueryOptions = {
filters?: NodeListFilters;
};
declare class Nodes {
static list(modem: Modem, queryOptions?: NodeListQueryOptions): Promise<NodeListResult>;
static getHandle(modem: Modem, id: NodeId): NodeHandle;
}
type PluginId = string;
type PluginMount = {
Name: string;
Description: string;
Settable: Array<string>;
Source: string;
Destination: string;
Type: string;
Options: Array<string>;
};
type PluginDevice = {
Name: string;
Description: string;
Settable: Array<string>;
Path: string;
};
type PluginSettings = {
Mounts: Array<PluginMount>;
Env: Array<string>;
Args: Array<string>;
Devices: Array<PluginDevice>;
};
type PluginInterfaceType = {
Prefix: string;
Capability: string;
Version: string;
};
type PluginInterfaceProtocolScheme = "" | "moby.plugins.http/v1";
type PluginInterface = {
Types: Array<PluginInterfaceType>;
Socket: string;
ProtocolScheme: PluginInterfaceProtocolScheme;
};
type PluginUser = {
UID: number;
GID: number;
};
type PluginNetwork = {
Type: string;
};
type PluginLinux = {
Capabilities: Array<string>;
AllowAllDevices: boolean;
Devices: Array<PluginDevice>;
};
type PluginEnv = {
Name: string;
Description: string;
Settable: Array<string>;
Value: string;
};
type PluginArgs = {
Name: string;
Description: string;
Settable: Array<string>;
Value: Array<string>;
};
type PluginRootfs = {
type: string;
diff_ids: Array<string>;
};
type PluginConfig = {
Docker: string;
Description: string;
Documentation: string;
Interface: PluginInterface;
Entrypoint: Array<string>;
WorkDir: string;
User: PluginUser;
Network: PluginNetwork;
Linux: PluginLinux;
PopagatedMount: string;
IpcHost: boolean;
PidHost: boolean;
Mounts: Array<PluginMount>;
Env: Array<PluginEnv>;
Args: PluginArgs;
rootfs: PluginRootfs;
};
interface Plugin {
Id: PluginId;
Name: string;
Enabled: boolean;
Settings: PluginSettings;
PluginReference: string;
Config: PluginConfig;
}
type PluginRemoveQueryOptions = {
force?: boolean;
};
type PluginEnableQueryOptions = {
timeout?: number;
};
type PluginDisableQueryOptions = {
force?: boolean;
};
declare class PluginHandle extends Handle {
inspect(): Promise<Plugin>;
remove(queryOptions?: PluginRemoveQueryOptions): Promise<void>;
enable(queryOptions?: PluginEnableQueryOptions): Promise<void>;
disable(queryOptions?: PluginDisableQueryOptions): Promise<void>;
static fromPlugin(modem: Modem, plugin: Plugin): PluginHandle;
}
type PluginListFilterType = "capability" | "enable";
type PluginListFilters = Map<PluginListFilterType, Array<string>>;
type PluginListResult = Array<Plugin>;
type PluginListQueryOptions = {
filters?: PluginListFilters;
};
type PluginGetPrivilegesQueryOptions = {
remote: string;
};
type PluginGetPrivilegesResult = Array<PluginPrivilege>;
type PluginInstallQueryOptions = PluginGetPrivilegesQueryOptions & {
name?: string;
};
declare class Plugins {
static list(modem: Modem, queryOptions?: PluginListQueryOptions): Promise<PluginListResult>;
/**
*
* @param modem modem to use
* @param queryOptions query options to use
* @param registryAuth is not included in docker api docs but is required for private repos to correctly return privileges
* @returns
*/
static getPrivileges(modem: Modem, queryOptions: PluginGetPrivilegesQueryOptions, registryAuth?: string): Promise<PluginGetPrivilegesResult>;
static install(modem: Modem, queryOptions: PluginInstallQueryOptions, privileges: Array<PluginPrivilege>, registryAuth?: string): Promise<HandleLogWrapper<PluginHandle>>;
static installGrantAllPrivileges(modem: Modem, queryOptions: PluginInstallQueryOptions, registryAuth?: string): Promise<HandleLogWrapper<PluginHandle>>;
static getHandle(modem: Modem, id: PluginId): PluginHandle;
}
type SwarmSpecOrchestration = {
TaskHistoryRetentionLimit: number;
};
type SwarmSpecRaft = {
SnapshotInterval: number;
KeepOldSnapshots: number;
LogEntriesForSlowFollowers: number;
ElectionTick: number;
HeartbeatTick: number;
};
type SwarmSpecDispatcher = {
HeartbeatPeriod: number;
};
type SwamSpecCAConfigExternalCAProtocol = "cfssl";
type SwamSpecCAConfigExternalCA = {
Protocol: SwamSpecCAConfigExternalCAProtocol;
URL: string;
Options: DockerOptions;
CACert: string;
};
type SwarmSpecCAConfig = {
NodeCertExpiry: number;
ExternalCAs: Array<SwamSpecCAConfigExternalCA>;
SigningCACert: string;
SigningCAKey: string;
ForceRotate: number;
};
type SwarmSpecEncryptionConfig = {
AutoLockManagers: boolean;
};
type SwarmSpecTaskDefaults = {
LogDriver: Driver;
};
type SwarmSpec = {
Name: string;
Labels: DockerLabels;
Orchestration: SwarmSpecOrchestration | null;
Raft: SwarmSpecRaft;
Dispatcher: SwarmSpecDispatcher;
CAConfig: SwarmSpecCAConfig;
EncryptionConfig: SwarmSpecEncryptionConfig;
TaskDefaults: SwarmSpecTaskDefaults;
};
interface SwarmCluster extends SwarmBase<string> {
Spec: SwarmSpec;
TLSInfo: TLSInfo;
RootRotationInProgress: boolean;
DataPathPort: number;
DefaultAddrPool: Array<Array<string>>;
SubnetSize: number;
}
type SwarmInitSpecBase = {
ListenAddr: string;
AdvertiseAddr: string;
DataPathAddr?: string;
};
type SwarmInitSpec = SwarmInitSpecBase & {
DataPathPort: number;
DefaultAddrPool: Array<string>;
ForceNewCluster: boolean;
SubnetSize: number;
Spec: SwarmSpec;
};
type SwarmJoinSpec = SwarmInitSpecBase & {
RemoteAddrs: Array<string>;
JoinToken: string;
};
type SwarmLeaveQueryOptions = {
force?: boolean;
};
type SwarmUpdateQueryOptions = {
rotateWorkerToken?: boolean;
rotateManagerToken?: boolean;
rotateManagerUnlockKey?: boolean;
};
type SwarmUnlockSpec = {
UnlockKey: string;
};
declare class Swarm {
static inspect(modem: Modem): Promise<SwarmCluster>;
static initialize(modem: Modem, initSpec: SwarmInitSpec): Promise<ModemDialResult>;
static join(modem: Modem, joinSpec: SwarmJoinSpec): Promise<ModemDialResult>;
static leave(modem: Modem, queryOptions?: SwarmLeaveQueryOptions): Promise<ModemDialResult>;
static update(modem: Modem, queryOptions: SwarmUpdateQueryOptions | undefined, spec: SwarmSpec): Promise<ModemDialResult>;
static getUnlockKey(modem: Modem): Promise<ModemDialResult>;
static unlock(modem: Modem, unlockSpec: SwarmUnlockSpec): Promise<ModemDialResult>;
}
type SecretId = string;
interface SecretSpecBase {
Name: string;
Labels?: DockerLabels;
Driver?: Driver;
Templating?: Driver;
}
interface SecretSpec extends SecretSpecBase {
Data: string;
}
interface Secret extends SwarmBase<SecretId> {
Spec: SecretSpecBase;
}
declare class SecretHandle extends Handle implements Stackable {
inspect(): Promise<Secret>;
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Secret/operation/SecretUpdate
* @param spec
*/
update(spec: SecretSpec): Promise<void>;
remove(): Promise<void>;
shouldThrowStackError(): boolean;
static isPartOfStack(secret: Secret): boolean | undefined;
static fromSecret(modem: Modem, secret: Secret): SecretHandle;
}
type SecretListFilterType = "id" | "label" | "name" | "names";
type SecretListFilters = Map<SecretListFilterType, Array<string>>;
type SecretListResult = Array<Secret>;
type SecretListQueryOptions = {
filters?: SecretListFilters;
};
declare class Secrets {
static list(modem: Modem, queryOptions?: SecretListQueryOptions): Promise<SecretListResult>;
static create(modem: Modem, spec: SecretSpec): Promise<SecretHandle>;
static exists(modem: Modem, name: string): Promise<{
exists: boolean;
handle: SecretHandle | undefined;
}>;
static getHandle(modem: Modem, id: SecretId): SecretHandle;
}
type TaskId = string;
type TaskPluginSpec = {
Name: string;
Remote: string;
Disabled: boolean;
PluginPrivileges: Array<PluginPrivilege>;
};
type TaskContainerPrivilegesCredentialSpec = {
Config: string;
File: string;
Registry: string;
};
type TaskContainerPrivilegesSELinuxContext = {
Disable: boolean;
User: string;
Role: string;
Type: string;
Level: string;
};
type TaskContainerPrivilegesSeccompMode = "default" | "unconfined" | "custom";
type TaskContainerPrivilegesSeccomp = {
Mode: TaskContainerPrivilegesSeccompMode;
Profile: string;
};
type TaskContainerPrivilegesAppArmorMode = "default" | "disabled";
type TaskContainerPrivilegesAppArmor = {
Mode: TaskContainerPrivilegesAppArmorMode;
};
type TaskContainerPrivileges = {
CredentialSpec: TaskContainerPrivilegesCredentialSpec;
SELinuxContext: TaskContainerPrivilegesSELinuxContext;
Seccomp: TaskContainerPrivilegesSeccomp;
AppArmor: TaskContainerPrivilegesAppArmor;
NoNewPrivileges: boolean;
};
type TaskContainerDNSConfig = {
NameServers: Array<string>;
Search: Array<string>;
Options: Array<string>;
};
type TaskContainerFile = {
Name: string;
UID: string;
GID: string;
Mode: number;
};
type TaskContainerSecret = {
File: TaskContainerFile;
SecretID: string;
SecretName: string;
};
type TaskContainerConfigFile = {
File: TaskContainerFile;
};
type TaskContainerConfigRuntime = {
Runtime: object;
};
type TaskContainerConfigBase = {
ConfigID: string;
ConfigName: string;
};
type TaskContainerConfig = XOR<TaskContainerConfigFile, TaskContainerConfigRuntime> & TaskContainerConfigBase;
type TaskContainerSysctls = {
[name: string]: string;
};
type TaskContainerUlimit = {
Name: string;
Soft: number;
Hard: number;
};
type TaskContainerSpec = {
Image: string;
Labels?: DockerLabels;
Command?: Array<string>;
Args?: Array<string>;
Hostname?: string;
Env?: Array<string>;
Dir?: string;
User?: string;
Groups?: Array<string>;
Privileges?: TaskContainerPrivileges;
TTY?: boolean;
OpenStdin?: boolean;
ReadOnly?: boolean;
Mounts?: Array<Mount>;
StopSignal?: string;
StopGracePeriod?: number;
HealthCheck?: HealthConfig;
Hosts?: Array<string>;
DNSConfig?: TaskContainerDNSConfig;
Secrets?: Array<TaskContainerSecret>;
Configs?: Array<TaskContainerConfig>;
Isolation?: Isolation;
Init?: boolean | null;
Sysctls?: TaskContainerSysctls;
CapabilityAdd?: Array<string>;
CapabilityDrop?: Array<string>;
Ulimits?: Array<TaskContainerUlimit>;
};
type TaskNetworkAttachmentSpec = {
ContainerID: ContainerId;
};
type TaskRestartPolicyCondition = "none" | "on-failure" | "any";
type TaskRestartPolicy = {
Condition: TaskRestartPolicyCondition;
Delay: number;
MaxAttempts: number;
Window: number;
};
type TaskPlacementPreferenceSpread = {
SpreadDescriptor: string;
};
type TaskPlacementPreference = {
Spread: TaskPlacementPreferenceSpread;
};
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Service/operation/ServiceList
*/
type TaskPlacement = {
Constraints: Array<string>;
Preferences: Array<TaskPlacementPreference>;
MaxReplicas: number;
Platforms: Array<Platform>;
};
type TaskSpecBase = {
Resources?: DockerResources;
RestartPolicy?: TaskRestartPolicy;
Placement?: TaskPlacement;
ForceUpdate?: number;
Runtime?: string;
Networks?: Array<NetworkAttachementConfig>;
LogDriver?: Driver;
};
type PluginTaskSpec = {
PluginSpec: TaskPluginSpec;
};
type ContainerTaskSpec = {
ContainerSpec: TaskContainerSpec;
};
type NetworkAttachmentTaskSpec = {
NetworkAttachmentSpec: TaskNetworkAttachmentSpec;
};
type TaskSpec = ALLXOR<[PluginTaskSpec, ContainerTaskSpec, NetworkAttachmentTaskSpec]> & TaskSpecBase;
type TaskState = "new" | "allocated" | "pending" | "assigned" | "accepted" | "preparing" | "ready" | "starting" | "running" | "complete" | "shutdown" | "failed" | "rejected" | "remove" | "orphaned";
type TaskStatus = {
Timestamp: string;
State: TaskState;
Message: string;
Err: string;
ContainerStatus?: ContainerStatus;
PortStatus: PortStatus;
};
interface Task extends SwarmBase<TaskId> {
Name: string;
Labels: DockerLabels;
Spec: TaskSpec;
ServiceID: ServiceId;
Slot: number;
NodeID: NodeId;
AssignedGenericResources: Array<GenericResource>;
Status: TaskStatus;
Desired: TaskState;
JobIteration: ObjectVersion;
}
type TaskLogsQueryOptions = {
details?: boolean;
follow?: boolean;
stdout?: boolean;
stderr?: boolean;
since?: number;
timestamps?: boolean;
tail?: string | "all";
};
declare class TaskHandle extends Handle {
inspect(): Promise<Task>;
getLogs(queryOptions?: TaskLogsQueryOptions): Promise<http.IncomingMessage>;
static fromTask(modem: Modem, task: Task): TaskHandle;
}
type ServiceId = string;
type ServiceModeReplicated = {
Replicas: number;
};
type ServiceModeReplicatedJob = {
MaxConcurrent: number;
TotalCompletions: number;
};
type ServiceModeReplicatedWrapper = {
Replicated: ServiceModeReplicated;
};
type ServiceModeReplicatedJobWrapper = {
ReplicatedJob: ServiceModeReplicatedJob;
};
type ServiceModeGlobalWrapper = {
Global: object;
};
type ServiceModeGlobalJobWrapper = {
GlobalJob: object;
};
type ServiceMode = ALLXOR<[ServiceModeReplicatedWrapper, ServiceModeReplicatedJobWrapper, ServiceModeGlobalWrapper, ServiceModeGlobalJobWrapper]>;
type ServiceConfigOrder = "stop-first" | "start-first";
interface ServiceConfig<FailureActionType extends string> {
Parallelism: number;
Delay: number;
FailureAction: FailureActionType;
Monitor: number;
MaxFailureRatio: number;
Order: ServiceConfigOrder;
}
type ServiceUpdateConfigFailureAction = "continue" | "pause" | "rollback";
type ServiceRollbackConfigFailureAction = "continue" | "pause";
type ServiceSpec = {
Name?: string;
Labels?: DockerLabels;
TaskTemplate: TaskSpec;
Mode?: ServiceMode;
UpdateConfig?: ServiceConfig<ServiceUpdateConfigFailureAction>;
RollbackConfig?: ServiceConfig<ServiceRollbackConfigFailureAction>;
Networks?: Array<NetworkAttachementConfig>;
EndpointSpec?: EndpointSpec;
};
type ServiceEndpointVirtualIP = {
NetworkID: NetworkId;
Addr: string;
};
type ServiceEndpoint = {
Spec: EndpointSpec;
Ports?: Array<EndpointPortConfig>;
VirtualIPs?: Array<ServiceEndpointVirtualIP>;
};
type ServiceUpdateStatusState = "updating" | "paused" | "completed";
type ServiceUpdateStatus = {
State: ServiceUpdateStatusState;
StartedAt: string;
CompletedAt: string;
Message: string;
};
type ServiceServiceStatus = {
RunningTasks: number;
DesiredTasks: number;
CompletedTasks: number;
};
type ServiceJobStatus = {
JobIteration: ObjectVersion;
LastExecution: string;
};
interface Service extends SwarmBase<ServiceId> {
Spec: ServiceSpec;
PreviousSpec?: ServiceSpec;
Endpoint: ServiceEndpoint;
UpdateStatus: ServiceUpdateStatus;
ServiceStatus: ServiceServiceStatus;
JobStatus: ServiceJobStatus;
}
type ServiceInspectQueryOptions = {
insertDefaults?: boolean;
};
type ServiceLogsQueryOptions = {
details?: boolean;
follow?: boolean;
stdout?: boolean;
stderr?: boolean;
since?: number;
timestamps?: boolean;
tail?: number | "all";
};
type ServiceUpdateQueryOptionsRegistryAuthFrom = "spec" | "previous-spec";
type ServiceRollbackQueryOptions = {
registryAuthFrom?: ServiceUpdateQueryOptionsRegistryAuthFrom;
};
type ServiceUpdateQueryOptions = ServiceRollbackQueryOptions & {
rollback?: string;
};
type ServiceUpdateResult = {
Warnings: Array<string>;
};
declare class ServiceHandle extends Handle implements Stackable {
inspect(queryOptions?: ServiceInspectQueryOptions): Promise<Service>;
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Service/operation/ServiceLogs
*
* @param queryOptions the query options to use
*/
getLogs(queryOptions?: ServiceLogsQueryOptions): Promise<http.IncomingMessage>;
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Service/operation/ServiceUpdate
*
* @param newSpec the new spec for the service
* @param queryOptions the query options to use
* @param registryAuth the authentication to connect to a private registry if needed
*/
update(newSpec: ServiceSpec, queryOptions?: ServiceUpdateQueryOptions, registryAuth?: string): Promise<ServiceUpdateResult>;
/**
* Removes this service and creates a new one with the same spec
* @param registryAuth
*/
redeploy(registryAuth?: string): Promise<ServiceHandle>;
rollback(queryOptions?: ServiceRollbackQueryOptions, registryAuth?: string): Promise<ServiceUpdateResult>;
stop(): Promise<ServiceUpdateResult>;
/**
* This will start a stopped service.
* Be careful tho, because it does a server side redeploy to the last running spec.
* And it only does that if the service is not running
*/
start(): Promise<ServiceUpdateResult>;
remove(): Promise<ModemDialResult>;
shouldThrowStackError(): boolean;
static isPartOfStack(service: Service): boolean | undefined;
static fromService(modem: Modem, service: Service): ServiceHandle;
}
type ServiceListFilterType = "id" | "label" | "mode" | "name";
type ServiceListFilters = Map<ServiceListFilterType, Array<string>>;
type ServiceListResult = Array<Service>;
type ServiceListQueryOptions = {
filters?: ServiceListFilters;
status?: boolean;
};
declare class Services {
/**
* @see https://docs.docker.com/engine/api/v1.44/#tag/Service/operation/ServiceList
*
* @param modem the modem to use
* @param filters the filters to use
* @param status include service status
*/
static list(modem: Modem, queryOptions?: ServiceListQueryOptions): Promise<ServiceListResult>;
static create(modem: Modem, spec: ServiceSpec, registryAuth?: string): Promise<ServiceHandle>;
static exists(modem: Modem, name: string): Promise<{
exists: boolean;
handle: ServiceHandle | undefined;
}>;
static getHandle(modem: Modem, id: ServiceId): ServiceHandle;
}
type DockerVolumeStatus = {
[key: string]: string;
};
type VolumeScope = "local" | "global";
type VolumeUsageData = {
Size: number;
RefCount: number;
};
interface VolumeSpec {
Name?: string;
Driver?: string;
DriverOpts?: DockerOptions;
Labels?: DockerLabels;
}
interface Volume {
Name: string;
Driver: string;
Mountpoint: string;
CreatedAt: string;
Status: DockerVolumeStatus;
Labels: DockerLabels;
Scope: VolumeScope;
Options: DockerOptions;
UsageData: VolumeUsageData | null;
}
type VolumeRemoveQueryOptions = {
force?: boolean;
};
declare class VolumeHandle extends Handle {
constructor(modem: Modem, name: string);
protected inspectResult(): Promise<ModemDialResult>;
inspect(): Promise<Volume>;
remove(queryOptions?: VolumeRemoveQueryOptions): Promise<void>;
protected shouldThrowStackError(): boolean;
static isPartOfStack(volume: Volume): boolean;
static fromVolume(modem: Modem, volume: Volume): VolumeHandle;
}
type ClusterVolumeId = string;
type ClusterVolumeAccesModeScope = "single" | "multi";
type ClusterVolumeAccesModeSharing = "none" | "readonly" | "onewriter" | "all";
type ClusterVolumeAvailability = "active" | "pause" | "drain";
type ClusterVolumeDataPublishStatusState = "pending-publish" | "published" | "pending-node-unpublish" | "pending-controller-unpublish";
type ClusterVolumeAccessModeBase = {
Scope?: ClusterVolumeAccesModeScope;
Sharing?: ClusterVolumeAccesModeSharing;
};
type ClusterVolumeAccessModeMountVolume = {
MountVolume: object;
};
type ClusterVolumeAccessModeBlockVolume = {
BlockVolume: object;
};
type ClusterVolumeAccessMode = ClusterVolumeAccessModeBase & XOR<ClusterVolumeAccessModeMountVolume, ClusterVolumeAccessModeBlockVolume>;
type ClusterVolumeSecret = {
Key: string;
Secret: string;
};
type ClusterVolumeAccessibilityRequirements = {
Requisite: Array<object>;
Preferred: Array<object>;
};
type ClusterVolumeCapacityRange = {
RequiredBytes: number;
LimitBytes: number;
};
type ClusterVolumeSpecBase = {
Group?: string;
AccessMode: ClusterVolumeAccessMode;
Secrets?: Arr