testcontainers 8.13.0 → 8.13.1-beta.2
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/dist/docker/docker-client.js +13 -10
- package/dist/docker/functions/image/image-exists.d.ts +2 -1
- package/dist/docker/functions/image/image-exists.js +4 -2
- package/dist/docker/functions/image/list-images.d.ts +2 -1
- package/dist/docker/functions/image/list-images.js +1 -3
- package/dist/docker/functions/image/pull-image.d.ts +2 -1
- package/dist/docker/functions/image/pull-image.js +2 -4
- package/dist/docker/functions/run-in-container.js +1 -1
- package/dist/generic-container/generic-container-builder.js +2 -1
- package/dist/generic-container/generic-container.js +1 -1
- package/dist/log-system-diagnostics.js +1 -0
- package/package.json +2 -2
|
@@ -32,15 +32,14 @@ const getDockerClient = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
32
32
|
logger_1.log.debug(`Found applicable Docker client strategy: ${strategy.getName()}`);
|
|
33
33
|
const { uri, dockerode } = yield strategy.initialise();
|
|
34
34
|
logger_1.log.debug(`Testing Docker client strategy URI: ${uri}`);
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
35
|
+
// if (await isDockerDaemonReachable(dockerode)) {
|
|
36
|
+
const host = yield resolveHost(dockerode, uri);
|
|
37
|
+
logger_1.log.info(`Using Docker client strategy: ${strategy.getName()}, Docker host: ${host}`);
|
|
38
|
+
(0, log_system_diagnostics_1.logSystemDiagnostics)();
|
|
39
|
+
return { host, dockerode };
|
|
40
|
+
// } else {
|
|
41
|
+
// log.warn(`Docker client strategy ${strategy.getName()} is not reachable`);
|
|
42
|
+
// }
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
throw new Error("No Docker client strategy found");
|
|
@@ -148,10 +147,14 @@ const resolveHost = (dockerode, uri) => __awaiter(void 0, void 0, void 0, functi
|
|
|
148
147
|
});
|
|
149
148
|
const findGateway = (dockerode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
150
149
|
var _a, _b, _c;
|
|
150
|
+
logger_1.log.debug(`Checking gateway for Docker host`);
|
|
151
151
|
const inspectResult = yield dockerode.getNetwork("bridge").inspect();
|
|
152
152
|
return (_c = (_b = (_a = inspectResult === null || inspectResult === void 0 ? void 0 : inspectResult.IPAM) === null || _a === void 0 ? void 0 : _a.Config) === null || _b === void 0 ? void 0 : _b.find((config) => config.Gateway !== undefined)) === null || _c === void 0 ? void 0 : _c.Gateway;
|
|
153
153
|
});
|
|
154
|
-
const findDefaultGateway = (dockerode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
154
|
+
const findDefaultGateway = (dockerode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
155
|
+
logger_1.log.debug(`Checking default gateway for Docker host`);
|
|
156
|
+
return (0, run_in_container_1.runInContainer)(dockerode, "alpine:3.14", ["sh", "-c", "ip route|awk '/default/ { print $3 }'"]);
|
|
157
|
+
});
|
|
155
158
|
const isInContainer = () => (0, fs_1.existsSync)("/.dockerenv");
|
|
156
159
|
let _dockerClient;
|
|
157
160
|
const dockerClient = () => {
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { DockerImageName } from "../../../docker-image-name";
|
|
2
|
-
|
|
2
|
+
import Dockerode from "dockerode";
|
|
3
|
+
export declare const imageExists: (dockerode: Dockerode, imageName: DockerImageName) => Promise<boolean>;
|
|
@@ -11,7 +11,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.imageExists = void 0;
|
|
13
13
|
const list_images_1 = require("./list-images");
|
|
14
|
-
const
|
|
15
|
-
|
|
14
|
+
const logger_1 = require("../../../logger");
|
|
15
|
+
const imageExists = (dockerode, imageName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
logger_1.log.debug(`Checking if image exists: ${imageName}`);
|
|
17
|
+
return (yield (0, list_images_1.listImages)(dockerode)).some((image) => image.equals(imageName));
|
|
16
18
|
});
|
|
17
19
|
exports.imageExists = imageExists;
|
|
@@ -11,11 +11,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.listImages = void 0;
|
|
13
13
|
const docker_image_name_1 = require("../../../docker-image-name");
|
|
14
|
-
const docker_client_1 = require("../../docker-client");
|
|
15
14
|
const logger_1 = require("../../../logger");
|
|
16
|
-
const listImages = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
const listImages = (dockerode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
16
|
try {
|
|
18
|
-
const { dockerode } = yield (0, docker_client_1.dockerClient)();
|
|
19
17
|
const images = yield dockerode.listImages();
|
|
20
18
|
return images.reduce((dockerImageNames, image) => {
|
|
21
19
|
var _a;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { DockerImageName } from "../../../docker-image-name";
|
|
2
2
|
import { AuthConfig } from "../../types";
|
|
3
|
+
import Dockerode from "dockerode";
|
|
3
4
|
export declare type PullImageOptions = {
|
|
4
5
|
imageName: DockerImageName;
|
|
5
6
|
force: boolean;
|
|
6
7
|
authConfig?: AuthConfig;
|
|
7
8
|
};
|
|
8
|
-
export declare const pullImage: (options: PullImageOptions) => Promise<void>;
|
|
9
|
+
export declare const pullImage: (dockerode: Dockerode, options: PullImageOptions) => Promise<void>;
|
|
@@ -12,16 +12,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.pullImage = void 0;
|
|
13
13
|
const logger_1 = require("../../../logger");
|
|
14
14
|
const pull_stream_parser_1 = require("../../pull-stream-parser");
|
|
15
|
-
const docker_client_1 = require("../../docker-client");
|
|
16
15
|
const image_exists_1 = require("./image-exists");
|
|
17
|
-
const pullImage = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const pullImage = (dockerode, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
17
|
try {
|
|
19
|
-
if ((yield (0, image_exists_1.imageExists)(options.imageName)) && !options.force) {
|
|
18
|
+
if ((yield (0, image_exists_1.imageExists)(dockerode, options.imageName)) && !options.force) {
|
|
20
19
|
logger_1.log.debug(`Not pulling image as it already exists: ${options.imageName}`);
|
|
21
20
|
return;
|
|
22
21
|
}
|
|
23
22
|
logger_1.log.info(`Pulling image: ${options.imageName}`);
|
|
24
|
-
const { dockerode } = yield (0, docker_client_1.dockerClient)();
|
|
25
23
|
const stream = yield dockerode.pull(options.imageName.toString(), { authconfig: options.authConfig });
|
|
26
24
|
yield new pull_stream_parser_1.PullStreamParser(options.imageName, logger_1.log).consume(stream);
|
|
27
25
|
}
|
|
@@ -19,7 +19,7 @@ const inspect_container_1 = require("./container/inspect-container");
|
|
|
19
19
|
const runInContainer = (dockerode, image, command) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
20
|
try {
|
|
21
21
|
const imageName = docker_image_name_1.DockerImageName.fromString(image);
|
|
22
|
-
yield (0, pull_image_1.pullImage)({ imageName, force: false });
|
|
22
|
+
yield (0, pull_image_1.pullImage)(dockerode, { imageName, force: false });
|
|
23
23
|
logger_1.log.debug(`Creating container: ${image} with command: ${command.join(" ")}`);
|
|
24
24
|
const container = yield dockerode.createContainer({ Image: image, Cmd: command, HostConfig: { AutoRemove: true } });
|
|
25
25
|
logger_1.log.debug(`Attaching to container: ${container.id}`);
|
|
@@ -24,6 +24,7 @@ const build_image_1 = require("../docker/functions/image/build-image");
|
|
|
24
24
|
const image_exists_1 = require("../docker/functions/image/image-exists");
|
|
25
25
|
const registry_auth_locator_1 = require("../registry-auth-locator");
|
|
26
26
|
const generic_container_1 = require("./generic-container");
|
|
27
|
+
const docker_client_1 = require("../docker/docker-client");
|
|
27
28
|
class GenericContainerBuilder {
|
|
28
29
|
constructor(context, dockerfileName, uuid = new uuid_1.RandomUuid()) {
|
|
29
30
|
this.context = context;
|
|
@@ -57,7 +58,7 @@ class GenericContainerBuilder {
|
|
|
57
58
|
registryConfig,
|
|
58
59
|
});
|
|
59
60
|
const container = new generic_container_1.GenericContainer(imageName.toString());
|
|
60
|
-
if (!(yield (0, image_exists_1.imageExists)(imageName))) {
|
|
61
|
+
if (!(yield (0, image_exists_1.imageExists)((yield (0, docker_client_1.dockerClient)()).dockerode, imageName))) {
|
|
61
62
|
throw new Error("Failed to build image");
|
|
62
63
|
}
|
|
63
64
|
return Promise.resolve(container);
|
|
@@ -61,7 +61,7 @@ class GenericContainer {
|
|
|
61
61
|
}
|
|
62
62
|
start() {
|
|
63
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
yield (0, pull_image_1.pullImage)({
|
|
64
|
+
yield (0, pull_image_1.pullImage)((yield (0, docker_client_1.dockerClient)()).dockerode, {
|
|
65
65
|
imageName: this.imageName,
|
|
66
66
|
force: this.pullPolicy.shouldPull(),
|
|
67
67
|
authConfig: yield (0, registry_auth_locator_1.getAuthConfig)(this.imageName.registry),
|
|
@@ -14,6 +14,7 @@ const logger_1 = require("./logger");
|
|
|
14
14
|
const docker_compose_1 = require("./docker-compose/docker-compose");
|
|
15
15
|
const get_info_1 = require("./docker/functions/get-info");
|
|
16
16
|
const logSystemDiagnostics = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
logger_1.log.debug("Fetching system diagnostics");
|
|
17
18
|
const info = {
|
|
18
19
|
node: getNodeInfo(),
|
|
19
20
|
docker: yield (0, get_info_1.getDockerInfo)(),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testcontainers",
|
|
3
3
|
"author": "Cristian Greco",
|
|
4
|
-
"version": "8.13.
|
|
4
|
+
"version": "8.13.1-beta.2",
|
|
5
5
|
"main": "dist/index",
|
|
6
6
|
"types": "dist/index",
|
|
7
7
|
"keywords": [
|
|
@@ -41,7 +41,6 @@
|
|
|
41
41
|
"docker-compose": "^0.23.17",
|
|
42
42
|
"dockerode": "^3.3.1",
|
|
43
43
|
"get-port": "^5.1.1",
|
|
44
|
-
"mongoose": "^5.13.15",
|
|
45
44
|
"properties-reader": "^2.2.0",
|
|
46
45
|
"ssh-remote-port-forward": "^1.0.4",
|
|
47
46
|
"tar-fs": "^2.1.1"
|
|
@@ -67,6 +66,7 @@
|
|
|
67
66
|
"kafkajs": "^1.16.0",
|
|
68
67
|
"lint-staged": "^12.3.8",
|
|
69
68
|
"mysql2": "^2.3.3",
|
|
69
|
+
"mongoose": "^5.13.15",
|
|
70
70
|
"nats": "^2.7.1",
|
|
71
71
|
"neo4j-driver": "^4.4.5",
|
|
72
72
|
"node-fetch": "^2.6.7",
|