@hallmaster/docker.js 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +188 -23
  2. package/dist/DockerContainersAPI.d.ts +46 -0
  3. package/dist/DockerContainersAPI.d.ts.map +1 -0
  4. package/dist/DockerContainersAPI.js +138 -0
  5. package/dist/DockerContainersAPI.js.map +1 -0
  6. package/dist/DockerImagesAPI.d.ts +84 -0
  7. package/dist/DockerImagesAPI.d.ts.map +1 -0
  8. package/dist/DockerImagesAPI.js +168 -0
  9. package/dist/DockerImagesAPI.js.map +1 -0
  10. package/dist/DockerSocket.d.ts +9 -8
  11. package/dist/DockerSocket.d.ts.map +1 -1
  12. package/dist/DockerSocket.js +68 -21
  13. package/dist/DockerSocket.js.map +1 -1
  14. package/dist/index.d.ts +16 -9
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/types/auth/DockerAuthToken.d.ts.map +1 -0
  19. package/dist/types/auth/DockerAuthToken.js.map +1 -0
  20. package/dist/types/auth/DockerRegistryCredential.d.ts +6 -0
  21. package/dist/types/auth/DockerRegistryCredential.d.ts.map +1 -0
  22. package/dist/types/auth/DockerRegistryCredential.js +2 -0
  23. package/dist/types/auth/DockerRegistryCredential.js.map +1 -0
  24. package/dist/types/containers/DockerContainer.d.ts.map +1 -0
  25. package/dist/types/containers/DockerContainer.js.map +1 -0
  26. package/dist/types/containers/DockerContainerCreated.d.ts +5 -0
  27. package/dist/types/containers/DockerContainerCreated.d.ts.map +1 -0
  28. package/dist/types/containers/DockerContainerCreated.js +2 -0
  29. package/dist/types/containers/DockerContainerCreated.js.map +1 -0
  30. package/dist/types/containers/DockerContainerCreationBody.d.ts +129 -0
  31. package/dist/types/containers/DockerContainerCreationBody.d.ts.map +1 -0
  32. package/dist/types/containers/DockerContainerCreationBody.js +2 -0
  33. package/dist/types/containers/DockerContainerCreationBody.js.map +1 -0
  34. package/dist/types/containers/DockerContainerPrune.d.ts +5 -0
  35. package/dist/types/containers/DockerContainerPrune.d.ts.map +1 -0
  36. package/dist/types/containers/DockerContainerPrune.js +2 -0
  37. package/dist/types/containers/DockerContainerPrune.js.map +1 -0
  38. package/dist/types/containers/DockerContainerStats.d.ts.map +1 -0
  39. package/dist/types/containers/DockerContainerStats.js.map +1 -0
  40. package/dist/types/containers/DockerContainerSummary.d.ts.map +1 -0
  41. package/dist/types/containers/DockerContainerSummary.js.map +1 -0
  42. package/dist/types/containers/DockerContainerTop.d.ts.map +1 -0
  43. package/dist/types/containers/DockerContainerTop.js.map +1 -0
  44. package/dist/types/images/DockerImageDeleted.d.ts +6 -0
  45. package/dist/types/images/DockerImageDeleted.d.ts.map +1 -0
  46. package/dist/types/images/DockerImageDeleted.js +2 -0
  47. package/dist/types/images/DockerImageDeleted.js.map +1 -0
  48. package/dist/types/images/DockerImageSummary.d.ts +59 -0
  49. package/dist/types/images/DockerImageSummary.d.ts.map +1 -0
  50. package/dist/types/images/DockerImageSummary.js +2 -0
  51. package/dist/types/images/DockerImageSummary.js.map +1 -0
  52. package/dist/types/system/DockerInfo.d.ts +131 -0
  53. package/dist/types/system/DockerInfo.d.ts.map +1 -0
  54. package/dist/types/system/DockerInfo.js +2 -0
  55. package/dist/types/system/DockerInfo.js.map +1 -0
  56. package/dist/types/system/DockerVersion.d.ts +33 -0
  57. package/dist/types/system/DockerVersion.d.ts.map +1 -0
  58. package/dist/types/system/DockerVersion.js +2 -0
  59. package/dist/types/system/DockerVersion.js.map +1 -0
  60. package/package.json +3 -1
  61. package/dist/DockerContainer.d.ts +0 -33
  62. package/dist/DockerContainer.d.ts.map +0 -1
  63. package/dist/DockerContainer.js +0 -59
  64. package/dist/DockerContainer.js.map +0 -1
  65. package/dist/types/DockerAuthToken.d.ts.map +0 -1
  66. package/dist/types/DockerAuthToken.js.map +0 -1
  67. package/dist/types/DockerContainer.d.ts.map +0 -1
  68. package/dist/types/DockerContainer.js.map +0 -1
  69. package/dist/types/DockerContainerStats.d.ts.map +0 -1
  70. package/dist/types/DockerContainerStats.js.map +0 -1
  71. package/dist/types/DockerContainerSummary.d.ts.map +0 -1
  72. package/dist/types/DockerContainerSummary.js.map +0 -1
  73. package/dist/types/DockerContainerTop.d.ts.map +0 -1
  74. package/dist/types/DockerContainerTop.js.map +0 -1
  75. /package/dist/types/{DockerAuthToken.d.ts → auth/DockerAuthToken.d.ts} +0 -0
  76. /package/dist/types/{DockerAuthToken.js → auth/DockerAuthToken.js} +0 -0
  77. /package/dist/types/{DockerContainer.d.ts → containers/DockerContainer.d.ts} +0 -0
  78. /package/dist/types/{DockerContainer.js → containers/DockerContainer.js} +0 -0
  79. /package/dist/types/{DockerContainerStats.d.ts → containers/DockerContainerStats.d.ts} +0 -0
  80. /package/dist/types/{DockerContainerStats.js → containers/DockerContainerStats.js} +0 -0
  81. /package/dist/types/{DockerContainerSummary.d.ts → containers/DockerContainerSummary.d.ts} +0 -0
  82. /package/dist/types/{DockerContainerSummary.js → containers/DockerContainerSummary.js} +0 -0
  83. /package/dist/types/{DockerContainerTop.d.ts → containers/DockerContainerTop.d.ts} +0 -0
  84. /package/dist/types/{DockerContainerTop.js → containers/DockerContainerTop.js} +0 -0
package/README.md CHANGED
@@ -21,16 +21,7 @@ import { DockerSocket } from "@hallmaster/docker.js";
21
21
 
22
22
  await socket.init(); // prepare the UNIX socket to be used
23
23
 
24
- // if you want, you may authenticate to a Docker Image registry
25
- // await socket.authenticate(
26
- // "ghcr.io",
27
- // "github_username",
28
- // "github_pat",
29
- // );
30
- // console.log(socket.token);
31
-
32
- // you can get the information of the API from the socket such as the version
33
- // of the Docker Engine
24
+ // get the information about the API (Docker Engine's version, ...)
34
25
  console.log(await socket.info());
35
26
  })();
36
27
  ```
@@ -38,23 +29,197 @@ import { DockerSocket } from "@hallmaster/docker.js";
38
29
  Once you have instantiated the `DockerSocket` object and initialized it with the
39
30
  `init()` method, you are ready to use it everywhere.
40
31
 
41
- For instance, to fetch data from containers, you may use this snippet :
32
+ ### Containers
33
+
34
+ To fetch data from containers, you may use this snippet :
42
35
 
43
36
  ```typescript
44
- import { DockerContainer } from "@hallmaster/docker.js";
37
+ import { DockerContainersAPI, DockerSocket } from "@hallmaster/docker.js";
38
+
39
+ async function sleep(ms: number): Promise<void> {
40
+ return new Promise<void>((resolve) => setTimeout(resolve, ms));
41
+ }
42
+
43
+ (async function () {
44
+ const socket = new DockerSocket();
45
45
 
46
- (async function() {
47
- // ...
46
+ await socket.init();
48
47
 
49
- const containerApi = new DockerContainer(dockerSocket);
48
+ const dockerContainersApi = new DockerContainersAPI(socket);
50
49
 
51
- const containers = await containerApi.list();
52
- for (const container of containers) {
53
- const containerLogs = await containerApi.logs(container.Id);
54
- console.log("-----------");
55
- console.log(`Logs for the container #${container.Id}`);
56
- console.log(containerLogs);
57
- console.log("-----------");
58
- }
50
+ const containers = await dockerContainersApi.list();
51
+ for (const container of containers) {
52
+ const containerLogs = await dockerContainersApi.logs(container.Id, {
53
+ stdout: true,
54
+ stderr: true,
55
+ });
56
+ console.log("-----------");
57
+ console.log(`Logs for the container #${container.Id}`);
58
+ console.log(containerLogs);
59
+ console.log("-----------");
60
+ }
61
+
62
+ const createdContainer = await dockerContainersApi.create(
63
+ {
64
+ Image: "redis:8.2.1-bookworm",
65
+ Labels: {
66
+ "@hallmaster/docker.js": "true",
67
+ },
68
+ },
69
+ "redis-container",
70
+ );
71
+
72
+ for (const warning of createdContainer.Warnings) {
73
+ console.warn(`[CONTAINER WARNING]: ${warning}`);
74
+ }
75
+
76
+ await dockerContainersApi.start(createdContainer.Id);
77
+
78
+ await sleep(2000);
79
+
80
+ const logs = await dockerContainersApi.logs(createdContainer.Id, {
81
+ stderr: true,
82
+ stdout: true,
83
+ });
84
+
85
+ console.log("--- REDIS TEST CONTAINER LOGS BEGIN ---");
86
+ console.log(logs);
87
+ console.log("--- REDIS TEST CONTAINER LOGS END ---");
88
+
89
+ console.log("Killing test container");
90
+ await dockerContainersApi.kill(createdContainer.Id);
91
+ console.log("Test container killed");
92
+
93
+ console.log("Removing test container");
94
+ await dockerContainersApi.remove(createdContainer.Id);
95
+ console.log("Test container removed");
96
+
97
+ const availableContainers = await dockerContainersApi.list({ all: true });
98
+ const isAnyContainerMatchingTestContainer = availableContainers.filter(
99
+ (container) => container.Id === createdContainer.Id,
100
+ );
101
+ if (isAnyContainerMatchingTestContainer.length === 1) {
102
+ console.error("The test container has not been remove properly");
103
+ }
59
104
  })();
60
105
  ```
106
+
107
+ ### Images
108
+
109
+ To create an image, you would use something similar to this :
110
+
111
+ ```typescript
112
+ import {
113
+ DockerImagesAPI,
114
+ DockerRegistryCredential,
115
+ DockerSocket,
116
+ } from "@hallmaster/docker.js";
117
+ import { pack } from "tar-fs"; // create a Readable tarball for build context
118
+
119
+ (async function () {
120
+ const socket = new DockerSocket();
121
+
122
+ await socket.init();
123
+
124
+ const dockerImagesApi = new DockerImagesAPI(socket);
125
+
126
+ const imageName = "dockerjs-test-image";
127
+ const tag = "latest";
128
+
129
+ // create the Readable build context
130
+ const buildContext = pack("./test/context");
131
+
132
+ // build the image
133
+ await dockerImagesApi.build(buildContext, [], {
134
+ tag: `${imageName}:${tag}`,
135
+ });
136
+
137
+ // lookup all images
138
+ const images = await dockerImagesApi.list({
139
+ all: true,
140
+ });
141
+
142
+ // checks the image has been built properly
143
+ const dockerjsTestImage = images.filter((image) =>
144
+ image.RepoTags.includes(`${imageName}:${tag}`),
145
+ );
146
+ if (dockerjsTestImage.length === 0) {
147
+ console.error("The Docker.js test image has not been built properly");
148
+ return;
149
+ }
150
+
151
+ const registryCredential: DockerRegistryCredential = {
152
+ serveraddress: "localhost:5001",
153
+ username: "admin",
154
+ password: "password",
155
+ };
156
+
157
+ const taggedImageName = `${registryCredential.serveraddress}/${registryCredential.username}/${imageName}`;
158
+
159
+ // tag the image
160
+ await dockerImagesApi.tag(imageName, {
161
+ repo: taggedImageName,
162
+ tag: tag,
163
+ });
164
+
165
+ // push the image
166
+ await dockerImagesApi.push(taggedImageName, {
167
+ tag: tag,
168
+ auth: registryCredential,
169
+ });
170
+
171
+ // remove the image for test cleanup
172
+ for (const imageNameToDelete of [imageName, taggedImageName]) {
173
+ const deletedImages = await dockerImagesApi.remove(imageNameToDelete, {
174
+ force: true,
175
+ noPrune: false,
176
+ });
177
+
178
+ // make sure the image has been deleted
179
+ const hasBeenDeleted = deletedImages.filter(
180
+ (deleted) =>
181
+ Object.keys(deleted).includes("Untagged") &&
182
+ Object.keys(deleted).includes(imageNameToDelete),
183
+ );
184
+ if (!hasBeenDeleted) {
185
+ console.error("The Docker.js test image has not been removed properly");
186
+ return;
187
+ }
188
+ }
189
+
190
+ // pull an image from remote registry
191
+ await dockerImagesApi.create({
192
+ fromImage: "nginx",
193
+ tag: "latest",
194
+ });
195
+
196
+ // pull an image from remote private registry
197
+ await dockerImagesApi.create({
198
+ fromImage: taggedImageName,
199
+ auth: registryCredential,
200
+ });
201
+ })().catch((e) => {
202
+ throw e;
203
+ });
204
+ ```
205
+
206
+ If you want to try to push the image to a registry, use the service located in
207
+ the [`docker-compose.yml`](./docker-compose.yml) file. It will setup a local
208
+ registry.
209
+
210
+ Then, use this command to setup the credentials inside :
211
+ ```bash
212
+ docker run --rm --entrypoint htpasswd httpd:2 -Bbn admin password > auth/htpasswd
213
+ ```
214
+
215
+ By default, username is `admin` and password is `password`. Obviously, this is
216
+ not secure, it's for demonstration purpose only. Also, `identitytoken`-based
217
+ authentication will not work, use the `username`/`password` and `serveraddress`
218
+ authentication, as in the provided example
219
+
220
+ ## Contributors
221
+
222
+ To contribute, there is a [`docker-compose.yml`](./docker-compose.yml) file at
223
+ the root of the project which contains a service called `openapi-server`. It's
224
+ a web server listening on port `8080` which hosts the OpenAPI specs of the REST
225
+ endpoints of the Docker Engine. It's an ease for development.
@@ -0,0 +1,46 @@
1
+ import { DockerSocket } from "./DockerSocket.js";
2
+ import type { DockerContainer } from "./types/containers/DockerContainer.js";
3
+ import type { DockerContainerCreated } from "./types/containers/DockerContainerCreated.js";
4
+ import type { DockerContainerCreationBody } from "./types/containers/DockerContainerCreationBody.js";
5
+ import type { DockerContainerPrune } from "./types/containers/DockerContainerPrune.js";
6
+ import type { DockerContainerStats } from "./types/containers/DockerContainerStats.js";
7
+ import type { DockerContainerSummary } from "./types/containers/DockerContainerSummary.js";
8
+ import type { DockerContainerTop } from "./types/containers/DockerContainerTop.js";
9
+ export declare class DockerContainersAPI {
10
+ private readonly dockerSocket;
11
+ constructor(dockerSocket: DockerSocket);
12
+ list(options?: {
13
+ all?: boolean;
14
+ limit?: number;
15
+ size?: boolean;
16
+ filters?: Record<string, string[]>;
17
+ }): Promise<DockerContainerSummary[]>;
18
+ get(containerId: string, size?: boolean): Promise<DockerContainer>;
19
+ top(containerId: string, psArgs?: string): Promise<DockerContainerTop>;
20
+ logs(containerId: string, options?: {
21
+ follow?: boolean;
22
+ stdout?: boolean;
23
+ stderr?: boolean;
24
+ since?: number;
25
+ until?: number;
26
+ timestamps?: boolean;
27
+ tail?: number | "all";
28
+ }): Promise<string>;
29
+ stats(containerId: string, options?: {
30
+ stream: true;
31
+ oneShot?: false;
32
+ } | {
33
+ stream: false;
34
+ oneShot?: boolean;
35
+ }): Promise<DockerContainerStats>;
36
+ create(body: Partial<DockerContainerCreationBody>, name?: string, platform?: string): Promise<DockerContainerCreated>;
37
+ start(containerId: string, detachKeys?: string): Promise<void>;
38
+ stop(containerId: string, signal?: string, timeout?: number): Promise<void>;
39
+ restart(containerId: string, signal?: string, timeout?: number): Promise<void>;
40
+ kill(containerId: string, signal?: string): Promise<void>;
41
+ pause(containerId: string): Promise<void>;
42
+ unpause(containerId: string): Promise<void>;
43
+ remove(containerId: string): Promise<void>;
44
+ prune(filters?: Record<string, string[]>): Promise<DockerContainerPrune>;
45
+ }
46
+ //# sourceMappingURL=DockerContainersAPI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerContainersAPI.d.ts","sourceRoot":"","sources":["../src/DockerContainersAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AACrG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAEnF,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAEjD,IAAI,CACR,OAAO,GAAE;QACP,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACiB,GACrD,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiB9B,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,OAAe;IAQ9C,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,MAAc;IAQ/C,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;KASvB;IAqBG,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,OAAO,GACH;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAE,GACjC;QACE,MAAM,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;KAIvB;IAgBG,MAAM,CACV,IAAI,EAAE,OAAO,CAAC,2BAA2B,CAAC,EAC1C,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,sBAAsB,CAAC;IA0B5B,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAsB9C,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAiB,EACzB,OAAO,GAAE,MAAW;IAoBhB,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAiB,EACzB,OAAO,GAAE,MAAW;IAoBhB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,MAAkB;IAepD,KAAK,CAAC,WAAW,EAAE,MAAM;IAOzB,OAAO,CAAC,WAAW,EAAE,MAAM;IAO3B,MAAM,CAAC,WAAW,EAAE,MAAM;IAO1B,KAAK,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;CASnD"}
@@ -0,0 +1,138 @@
1
+ import { DockerSocket } from "./DockerSocket.js";
2
+ export class DockerContainersAPI {
3
+ dockerSocket;
4
+ constructor(dockerSocket) {
5
+ this.dockerSocket = dockerSocket;
6
+ }
7
+ async list(options = { all: false, limit: 0, size: false, filters: {} }) {
8
+ const apiOptions = {
9
+ all: (options.all ?? false).toString(),
10
+ limit: (options.limit ?? 0).toString(),
11
+ size: (options.size ?? false).toString(),
12
+ filters: JSON.stringify(options.filters ?? {}),
13
+ };
14
+ return await this.dockerSocket.apiCall("GET", "/containers/json", {
15
+ query: apiOptions,
16
+ });
17
+ }
18
+ async get(containerId, size = false) {
19
+ return await this.dockerSocket.apiCall("GET", `/containers/${containerId}/json`, { query: { size: size.toString() } });
20
+ }
21
+ async top(containerId, psArgs = "-ef") {
22
+ return await this.dockerSocket.apiCall("GET", `/containers/${containerId}/top`, { query: { psArgs: psArgs } });
23
+ }
24
+ async logs(containerId, options = {
25
+ follow: false,
26
+ stdout: false,
27
+ stderr: false,
28
+ since: 0,
29
+ until: 0,
30
+ timestamps: false,
31
+ tail: "all",
32
+ }) {
33
+ const apiOptions = {
34
+ follow: (options?.follow ?? false).toString(),
35
+ stdout: (options?.stdout ?? false).toString(),
36
+ stderr: (options?.stderr ?? false).toString(),
37
+ since: (options?.since ?? 0).toString(),
38
+ until: (options?.until ?? 0).toString(),
39
+ timestamps: (options?.timestamps ?? false).toString(),
40
+ tail: (options?.tail ?? "all").toString(),
41
+ };
42
+ return await this.dockerSocket.apiCall("GET", `/containers/${containerId}/logs`, {
43
+ query: apiOptions,
44
+ });
45
+ }
46
+ async stats(containerId, options = {
47
+ stream: true,
48
+ oneShot: false,
49
+ }) {
50
+ const apiOptions = {
51
+ stream: (options.stream ?? true).toString(),
52
+ "one-shot": (options.oneShot ?? false).toString(),
53
+ };
54
+ return await this.dockerSocket.apiCall("GET", `/containers/${containerId}/stats`, {
55
+ query: apiOptions,
56
+ });
57
+ }
58
+ async create(body, name, platform) {
59
+ if (name !== undefined && !/^[a-zA-Z0-9][a-zA-Z0-9_\.-]+$/.test(name)) {
60
+ throw new Error("DockerContainerAPI: Invalid container name");
61
+ }
62
+ const apiOptions = {};
63
+ if (name !== undefined) {
64
+ apiOptions.name = name;
65
+ }
66
+ if (platform !== undefined) {
67
+ apiOptions.platform = platform;
68
+ }
69
+ return await this.dockerSocket.apiCall("POST", "/containers/create", {
70
+ body: JSON.stringify(body),
71
+ query: apiOptions,
72
+ headers: {
73
+ "Content-Type": "application/json",
74
+ },
75
+ });
76
+ }
77
+ async start(containerId, detachKeys) {
78
+ if (detachKeys !== undefined &&
79
+ !/^(ctrl-[a-z@\^\[,_]|[a-z])$/.test(detachKeys)) {
80
+ throw new Error("DockerContainersAPI: Invalid detachKeys sequence");
81
+ }
82
+ const apiOptions = {};
83
+ if (detachKeys !== undefined) {
84
+ apiOptions.detachKeys = detachKeys;
85
+ }
86
+ await this.dockerSocket.apiCall("POST", `/containers/${containerId}/start`, {
87
+ query: apiOptions,
88
+ });
89
+ }
90
+ async stop(containerId, signal = "SIGINT", timeout = 10) {
91
+ const apiOptions = {};
92
+ if (signal !== undefined) {
93
+ apiOptions.signal = signal;
94
+ }
95
+ if (timeout !== undefined) {
96
+ apiOptions.timeout = timeout.toString();
97
+ }
98
+ await this.dockerSocket.apiCall("POST", `/containers/${containerId}/stop`, {
99
+ query: apiOptions,
100
+ });
101
+ }
102
+ async restart(containerId, signal = "SIGINT", timeout = 10) {
103
+ const apiOptions = {};
104
+ if (signal !== undefined) {
105
+ apiOptions.signal = signal;
106
+ }
107
+ if (timeout !== undefined) {
108
+ apiOptions.timeout = timeout.toString();
109
+ }
110
+ await this.dockerSocket.apiCall("POST", `/containers/${containerId}/restart`, {
111
+ query: apiOptions,
112
+ });
113
+ }
114
+ async kill(containerId, signal = "SIGKILL") {
115
+ const apiOptions = {};
116
+ if (signal !== undefined) {
117
+ apiOptions.signal = signal;
118
+ }
119
+ await this.dockerSocket.apiCall("POST", `/containers/${containerId}/kill`, {
120
+ query: apiOptions,
121
+ });
122
+ }
123
+ async pause(containerId) {
124
+ await this.dockerSocket.apiCall("POST", `/containers/${containerId}/pause`);
125
+ }
126
+ async unpause(containerId) {
127
+ await this.dockerSocket.apiCall("POST", `/containers/${containerId}/unpause`);
128
+ }
129
+ async remove(containerId) {
130
+ await this.dockerSocket.apiCall("DELETE", `/containers/${containerId}`);
131
+ }
132
+ async prune(filters = {}) {
133
+ return await this.dockerSocket.apiCall("POST", `/containers/prune`, {
134
+ query: { filters: JSON.stringify(filters) },
135
+ });
136
+ }
137
+ }
138
+ //# sourceMappingURL=DockerContainersAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerContainersAPI.js","sourceRoot":"","sources":["../src/DockerContainersAPI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { Readable } from "node:stream";
2
+ import type { DockerSocket } from "./DockerSocket.js";
3
+ import type { DockerImageSummary } from "./types/images/DockerImageSummary.js";
4
+ import type { DockerRegistryCredential } from "./types/auth/DockerRegistryCredential.js";
5
+ import type { DockerImageDeleted } from "./types/images/DockerImageDeleted.js";
6
+ export declare class DockerImagesAPI {
7
+ private readonly dockerSocket;
8
+ constructor(dockerSocket: DockerSocket);
9
+ list(options?: {
10
+ all?: boolean;
11
+ filters?: Record<string, string[]>;
12
+ sharedSize?: boolean;
13
+ digests?: boolean;
14
+ manifests?: boolean;
15
+ }): Promise<DockerImageSummary[]>;
16
+ build(inputStream: Readable, // tar blob
17
+ registriesCredentials?: DockerRegistryCredential[], options?: {
18
+ dockerfile?: string;
19
+ tag?: string;
20
+ extraHosts?: string;
21
+ remote?: string;
22
+ quiet?: boolean;
23
+ noCache?: boolean;
24
+ cacheFrom?: string;
25
+ pull?: string;
26
+ rm?: boolean;
27
+ forceRm?: boolean;
28
+ memory?: number;
29
+ memSwap?: number;
30
+ cpuShares?: number;
31
+ cpuSetCpus?: string;
32
+ cpuPeriod?: number;
33
+ cpuQuota?: number;
34
+ buildArgs?: Record<string, string>;
35
+ shmSize?: number;
36
+ squash?: boolean;
37
+ labels?: Record<string, string>;
38
+ networkMode?: "bridge" | "host" | "none" | string;
39
+ platform?: string;
40
+ target?: string;
41
+ buildKitOutputs?: string;
42
+ buildKitVersion?: 1 | 2;
43
+ }): Promise<void>;
44
+ remove(imageNameOrId: string, options?: {
45
+ force?: boolean;
46
+ noPrune?: boolean;
47
+ platforms?: string[];
48
+ }): Promise<DockerImageDeleted[]>;
49
+ push(imageName: string, // registry.example.com/myimage, don't provide a tag here
50
+ options?: {
51
+ tag: string;
52
+ platform?: {
53
+ os: string;
54
+ } | {
55
+ os: string;
56
+ architecture: string;
57
+ } | {
58
+ os: string;
59
+ architecture: string;
60
+ variant: string;
61
+ };
62
+ auth?: {
63
+ identitytoken: string;
64
+ } | DockerRegistryCredential;
65
+ }): Promise<void>;
66
+ tag(imageNameOrId: string, options: {
67
+ repo: string;
68
+ tag?: string;
69
+ }): Promise<void>;
70
+ create(options: {
71
+ fromImage?: string;
72
+ fromSrc?: "-" | string;
73
+ repo?: string;
74
+ tag?: string;
75
+ message?: string;
76
+ changes?: string[];
77
+ platform?: string;
78
+ inputImage?: string | Readable;
79
+ auth?: {
80
+ identitytoken: string;
81
+ } | DockerRegistryCredential;
82
+ }): Promise<void>;
83
+ }
84
+ //# sourceMappingURL=DockerImagesAPI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerImagesAPI.d.ts","sourceRoot":"","sources":["../src/DockerImagesAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAEjD,IAAI,CACR,OAAO,GAAE;QACP,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KAOrB,GACA,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkB1B,KAAK,CACT,WAAW,EAAE,QAAQ,EAAE,WAAW;IAClC,qBAAqB,GAAE,wBAAwB,EAAO,EACtD,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,OAAO,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;KA2BzB;IA4DG,MAAM,CACV,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KAKtB;IAmBG,IAAI,CACR,SAAS,EAAE,MAAM,EAAE,yDAAyD;IAC5E,OAAO,GAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EACL;YACE,EAAE,EAAE,MAAM,CAAC;SACZ,GACD;YACE,EAAE,EAAE,MAAM,CAAC;YACX,YAAY,EAAE,MAAM,CAAC;SACtB,GACD;YACE,EAAE,EAAE,MAAM,CAAC;YACX,YAAY,EAAE,MAAM,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACN,IAAI,CAAC,EACD;YAAE,aAAa,EAAE,MAAM,CAAA;SAAE,GACzB,wBAAwB,CAAC;KAK9B;IAuBG,GAAG,CACP,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd;IAgBG,MAAM,CAAC,OAAO,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,EACD;YAAE,aAAa,EAAE,MAAM,CAAA;SAAE,GACzB,wBAAwB,CAAC;KAC9B;CA+BF"}