@hallmaster/docker.js 0.0.14 → 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.
- package/README.md +188 -23
- package/dist/DockerContainersAPI.d.ts +17 -5
- package/dist/DockerContainersAPI.d.ts.map +1 -1
- package/dist/DockerContainersAPI.js +79 -0
- package/dist/DockerContainersAPI.js.map +1 -1
- package/dist/DockerImagesAPI.d.ts +84 -0
- package/dist/DockerImagesAPI.d.ts.map +1 -0
- package/dist/DockerImagesAPI.js +168 -0
- package/dist/DockerImagesAPI.js.map +1 -0
- package/dist/DockerSocket.d.ts +8 -7
- package/dist/DockerSocket.d.ts.map +1 -1
- package/dist/DockerSocket.js +67 -20
- package/dist/DockerSocket.js.map +1 -1
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types/auth/DockerAuthToken.d.ts.map +1 -0
- package/dist/types/auth/DockerAuthToken.js.map +1 -0
- package/dist/types/auth/DockerRegistryCredential.d.ts +6 -0
- package/dist/types/auth/DockerRegistryCredential.d.ts.map +1 -0
- package/dist/types/auth/DockerRegistryCredential.js +2 -0
- package/dist/types/auth/DockerRegistryCredential.js.map +1 -0
- package/dist/types/containers/DockerContainer.d.ts.map +1 -0
- package/dist/types/containers/DockerContainer.js.map +1 -0
- package/dist/types/containers/DockerContainerCreated.d.ts +5 -0
- package/dist/types/containers/DockerContainerCreated.d.ts.map +1 -0
- package/dist/types/containers/DockerContainerCreated.js +2 -0
- package/dist/types/containers/DockerContainerCreated.js.map +1 -0
- package/dist/types/containers/DockerContainerCreationBody.d.ts +129 -0
- package/dist/types/containers/DockerContainerCreationBody.d.ts.map +1 -0
- package/dist/types/containers/DockerContainerCreationBody.js +2 -0
- package/dist/types/containers/DockerContainerCreationBody.js.map +1 -0
- package/dist/types/containers/DockerContainerPrune.d.ts +5 -0
- package/dist/types/containers/DockerContainerPrune.d.ts.map +1 -0
- package/dist/types/containers/DockerContainerPrune.js +2 -0
- package/dist/types/containers/DockerContainerPrune.js.map +1 -0
- package/dist/types/containers/DockerContainerStats.d.ts.map +1 -0
- package/dist/types/containers/DockerContainerStats.js.map +1 -0
- package/dist/types/containers/DockerContainerSummary.d.ts.map +1 -0
- package/dist/types/containers/DockerContainerSummary.js.map +1 -0
- package/dist/types/containers/DockerContainerTop.d.ts.map +1 -0
- package/dist/types/containers/DockerContainerTop.js.map +1 -0
- package/dist/types/images/DockerImageDeleted.d.ts +6 -0
- package/dist/types/images/DockerImageDeleted.d.ts.map +1 -0
- package/dist/types/images/DockerImageDeleted.js +2 -0
- package/dist/types/images/DockerImageDeleted.js.map +1 -0
- package/dist/types/images/DockerImageSummary.d.ts +59 -0
- package/dist/types/images/DockerImageSummary.d.ts.map +1 -0
- package/dist/types/images/DockerImageSummary.js +2 -0
- package/dist/types/images/DockerImageSummary.js.map +1 -0
- package/dist/types/system/DockerInfo.d.ts +131 -0
- package/dist/types/system/DockerInfo.d.ts.map +1 -0
- package/dist/types/system/DockerInfo.js +2 -0
- package/dist/types/system/DockerInfo.js.map +1 -0
- package/dist/types/system/DockerVersion.d.ts +33 -0
- package/dist/types/system/DockerVersion.d.ts.map +1 -0
- package/dist/types/system/DockerVersion.js +2 -0
- package/dist/types/system/DockerVersion.js.map +1 -0
- package/package.json +3 -1
- package/dist/DockerContainer.d.ts +0 -33
- package/dist/DockerContainer.d.ts.map +0 -1
- package/dist/DockerContainer.js +0 -59
- package/dist/DockerContainer.js.map +0 -1
- package/dist/types/DockerAuthToken.d.ts.map +0 -1
- package/dist/types/DockerAuthToken.js.map +0 -1
- package/dist/types/DockerContainer.d.ts.map +0 -1
- package/dist/types/DockerContainer.js.map +0 -1
- package/dist/types/DockerContainerStats.d.ts.map +0 -1
- package/dist/types/DockerContainerStats.js.map +0 -1
- package/dist/types/DockerContainerSummary.d.ts.map +0 -1
- package/dist/types/DockerContainerSummary.js.map +0 -1
- package/dist/types/DockerContainerTop.d.ts.map +0 -1
- package/dist/types/DockerContainerTop.js.map +0 -1
- /package/dist/types/{DockerAuthToken.d.ts → auth/DockerAuthToken.d.ts} +0 -0
- /package/dist/types/{DockerAuthToken.js → auth/DockerAuthToken.js} +0 -0
- /package/dist/types/{DockerContainer.d.ts → containers/DockerContainer.d.ts} +0 -0
- /package/dist/types/{DockerContainer.js → containers/DockerContainer.js} +0 -0
- /package/dist/types/{DockerContainerStats.d.ts → containers/DockerContainerStats.d.ts} +0 -0
- /package/dist/types/{DockerContainerStats.js → containers/DockerContainerStats.js} +0 -0
- /package/dist/types/{DockerContainerSummary.d.ts → containers/DockerContainerSummary.d.ts} +0 -0
- /package/dist/types/{DockerContainerSummary.js → containers/DockerContainerSummary.js} +0 -0
- /package/dist/types/{DockerContainerTop.d.ts → containers/DockerContainerTop.d.ts} +0 -0
- /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
|
-
//
|
|
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
|
-
|
|
32
|
+
### Containers
|
|
33
|
+
|
|
34
|
+
To fetch data from containers, you may use this snippet :
|
|
42
35
|
|
|
43
36
|
```typescript
|
|
44
|
-
import { DockerContainersAPI } 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
|
-
|
|
47
|
-
// ...
|
|
46
|
+
await socket.init();
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
const dockerContainersApi = new DockerContainersAPI(socket);
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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.
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { DockerSocket } from "./DockerSocket.js";
|
|
2
|
-
import type { DockerContainer } from "./types/DockerContainer.js";
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
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";
|
|
6
9
|
export declare class DockerContainersAPI {
|
|
7
10
|
private readonly dockerSocket;
|
|
8
11
|
constructor(dockerSocket: DockerSocket);
|
|
@@ -11,7 +14,7 @@ export declare class DockerContainersAPI {
|
|
|
11
14
|
limit?: number;
|
|
12
15
|
size?: boolean;
|
|
13
16
|
filters?: Record<string, string[]>;
|
|
14
|
-
}): Promise<DockerContainerSummary>;
|
|
17
|
+
}): Promise<DockerContainerSummary[]>;
|
|
15
18
|
get(containerId: string, size?: boolean): Promise<DockerContainer>;
|
|
16
19
|
top(containerId: string, psArgs?: string): Promise<DockerContainerTop>;
|
|
17
20
|
logs(containerId: string, options?: {
|
|
@@ -30,5 +33,14 @@ export declare class DockerContainersAPI {
|
|
|
30
33
|
stream: false;
|
|
31
34
|
oneShot?: boolean;
|
|
32
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>;
|
|
33
45
|
}
|
|
34
46
|
//# sourceMappingURL=DockerContainersAPI.d.ts.map
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -55,5 +55,84 @@ export class DockerContainersAPI {
|
|
|
55
55
|
query: apiOptions,
|
|
56
56
|
});
|
|
57
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
|
+
}
|
|
58
137
|
}
|
|
59
138
|
//# sourceMappingURL=DockerContainersAPI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerContainersAPI.js","sourceRoot":"","sources":["../src/DockerContainersAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
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":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
export class DockerImagesAPI {
|
|
2
|
+
dockerSocket;
|
|
3
|
+
constructor(dockerSocket) {
|
|
4
|
+
this.dockerSocket = dockerSocket;
|
|
5
|
+
}
|
|
6
|
+
async list(options = {
|
|
7
|
+
all: false,
|
|
8
|
+
filters: {},
|
|
9
|
+
sharedSize: false,
|
|
10
|
+
digests: false,
|
|
11
|
+
manifests: false,
|
|
12
|
+
}) {
|
|
13
|
+
const apiOptions = {
|
|
14
|
+
all: (options.all ?? false).toString(),
|
|
15
|
+
filters: JSON.stringify(options.filters ?? {}),
|
|
16
|
+
"shared-size": (options.sharedSize ?? false).toString(),
|
|
17
|
+
digests: (options.digests ?? false).toString(),
|
|
18
|
+
manifests: (options.manifests ?? false).toString(),
|
|
19
|
+
};
|
|
20
|
+
return await this.dockerSocket.apiCall("GET", "/images/json", {
|
|
21
|
+
query: apiOptions,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async build(inputStream, // tar blob
|
|
25
|
+
registriesCredentials = [], options = {
|
|
26
|
+
dockerfile: "Dockerfile",
|
|
27
|
+
tag: undefined,
|
|
28
|
+
extraHosts: undefined,
|
|
29
|
+
remote: undefined,
|
|
30
|
+
quiet: false,
|
|
31
|
+
noCache: false,
|
|
32
|
+
cacheFrom: undefined,
|
|
33
|
+
pull: undefined,
|
|
34
|
+
rm: true,
|
|
35
|
+
forceRm: false,
|
|
36
|
+
memory: undefined,
|
|
37
|
+
memSwap: undefined,
|
|
38
|
+
cpuShares: undefined,
|
|
39
|
+
cpuSetCpus: undefined,
|
|
40
|
+
cpuPeriod: undefined,
|
|
41
|
+
cpuQuota: undefined,
|
|
42
|
+
buildArgs: undefined,
|
|
43
|
+
shmSize: undefined,
|
|
44
|
+
squash: undefined,
|
|
45
|
+
labels: undefined,
|
|
46
|
+
networkMode: undefined,
|
|
47
|
+
platform: undefined,
|
|
48
|
+
target: undefined,
|
|
49
|
+
buildKitOutputs: undefined,
|
|
50
|
+
buildKitVersion: 1,
|
|
51
|
+
}) {
|
|
52
|
+
const apiOptions = {
|
|
53
|
+
dockerfile: options.dockerfile ?? "Dockerfile",
|
|
54
|
+
t: options.tag,
|
|
55
|
+
extrahosts: options.extraHosts,
|
|
56
|
+
remote: options.remote,
|
|
57
|
+
q: (options.quiet ?? false).toString(),
|
|
58
|
+
nocache: (options.noCache ?? false).toString(),
|
|
59
|
+
cachefrom: options.cacheFrom,
|
|
60
|
+
pull: options.pull,
|
|
61
|
+
rm: (options.rm ?? true).toString(),
|
|
62
|
+
forcerm: (options.forceRm ?? false).toString(),
|
|
63
|
+
memory: options.memory?.toString(),
|
|
64
|
+
memswap: options.memSwap?.toString(),
|
|
65
|
+
cpushares: options.cpuShares?.toString(),
|
|
66
|
+
cpusetcpus: options.cpuSetCpus,
|
|
67
|
+
cpuperiod: options.cpuPeriod?.toString(),
|
|
68
|
+
cpuquota: options.cpuQuota?.toString(),
|
|
69
|
+
buildargs: options.buildArgs
|
|
70
|
+
? JSON.stringify(options.buildArgs)
|
|
71
|
+
: undefined,
|
|
72
|
+
shmsize: options.shmSize?.toString(),
|
|
73
|
+
squash: options.squash?.toString(),
|
|
74
|
+
labels: options.labels ? JSON.stringify(options.labels) : undefined,
|
|
75
|
+
networkmode: options.networkMode,
|
|
76
|
+
platform: options.platform,
|
|
77
|
+
target: options.target,
|
|
78
|
+
outputs: options.buildKitOutputs,
|
|
79
|
+
version: (options.buildKitVersion ?? 1).toString(),
|
|
80
|
+
};
|
|
81
|
+
const registryConfig = registriesCredentials.reduce((acc, cur) => ({
|
|
82
|
+
...acc,
|
|
83
|
+
[cur.serveraddress]: { username: cur.username, password: cur.password },
|
|
84
|
+
}), {});
|
|
85
|
+
const headers = {
|
|
86
|
+
"Content-Type": "application/x-tar",
|
|
87
|
+
};
|
|
88
|
+
if (Object.keys(registryConfig).length > 0) {
|
|
89
|
+
const rawRegistryConfig = Buffer.from(JSON.stringify(registryConfig)).toString("base64");
|
|
90
|
+
headers["X-Registry-Config"] = rawRegistryConfig;
|
|
91
|
+
}
|
|
92
|
+
await this.dockerSocket.apiCall("POST", "/build", {
|
|
93
|
+
query: apiOptions,
|
|
94
|
+
body: inputStream,
|
|
95
|
+
headers: headers,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async remove(imageNameOrId, options = {
|
|
99
|
+
force: false,
|
|
100
|
+
noPrune: false,
|
|
101
|
+
platforms: undefined,
|
|
102
|
+
}) {
|
|
103
|
+
const apiOptions = {
|
|
104
|
+
force: (options.force ?? false).toString(),
|
|
105
|
+
noprune: (options.noPrune ?? false).toString(),
|
|
106
|
+
platforms: options.platforms
|
|
107
|
+
? JSON.stringify(options.platforms)
|
|
108
|
+
: undefined,
|
|
109
|
+
};
|
|
110
|
+
return await this.dockerSocket.apiCall("DELETE", `/images/${imageNameOrId}`, {
|
|
111
|
+
query: apiOptions,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async push(imageName, // registry.example.com/myimage, don't provide a tag here
|
|
115
|
+
options = {
|
|
116
|
+
tag: "latest",
|
|
117
|
+
platform: undefined,
|
|
118
|
+
auth: undefined,
|
|
119
|
+
}) {
|
|
120
|
+
const apiOptions = {
|
|
121
|
+
tag: options.tag ?? "latest",
|
|
122
|
+
platform: options.platform ? JSON.stringify(options.platform) : undefined,
|
|
123
|
+
};
|
|
124
|
+
const token = Buffer.from(JSON.stringify(options.auth ?? {})).toString("base64url");
|
|
125
|
+
await this.dockerSocket.apiCall("POST", `/images/${imageName}/push`, {
|
|
126
|
+
query: apiOptions,
|
|
127
|
+
headers: {
|
|
128
|
+
"X-Registry-Auth": token,
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async tag(imageNameOrId, options) {
|
|
133
|
+
const apiOptions = {
|
|
134
|
+
repo: options.repo ?? "",
|
|
135
|
+
tag: options.tag ?? "latest",
|
|
136
|
+
};
|
|
137
|
+
await this.dockerSocket.apiCall("POST", `/images/${imageNameOrId}/tag`, {
|
|
138
|
+
query: apiOptions,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async create(options) {
|
|
142
|
+
const apiOptions = {
|
|
143
|
+
fromImage: options.fromImage,
|
|
144
|
+
fromSrc: options.fromSrc,
|
|
145
|
+
repo: options.repo,
|
|
146
|
+
tag: options.tag,
|
|
147
|
+
message: options.message,
|
|
148
|
+
changes: options.changes?.map(encodeURIComponent),
|
|
149
|
+
platform: options.platform,
|
|
150
|
+
};
|
|
151
|
+
const headers = {};
|
|
152
|
+
if (options.auth) {
|
|
153
|
+
headers["X-Registry-Auth"] = Buffer.from(JSON.stringify(options.auth)).toString("base64url");
|
|
154
|
+
}
|
|
155
|
+
if (options.inputImage) {
|
|
156
|
+
headers["Content-Type"] =
|
|
157
|
+
typeof options.inputImage === "string"
|
|
158
|
+
? "text/plain"
|
|
159
|
+
: "application/octet-stream";
|
|
160
|
+
}
|
|
161
|
+
await this.dockerSocket.apiCall("POST", "/images/create", {
|
|
162
|
+
headers,
|
|
163
|
+
body: options.inputImage,
|
|
164
|
+
query: apiOptions,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=DockerImagesAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerImagesAPI.js","sourceRoot":"","sources":["../src/DockerImagesAPI.ts"],"names":[],"mappings":"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"}
|