From 6e9489195949cba992251f726e6384723bcba588 Mon Sep 17 00:00:00 2001 From: Jameel Al-Aziz Date: Wed, 24 Jul 2024 22:17:59 -0700 Subject: [PATCH 1/2] Support custom compose project names Allow custom project names for docker compose environments. This can be useful when running tests in CI environment where images may be built separately and loaded into the local docker image cache and consistent image names are needed (without having to specify local image names for each service). --- .../docker-compose-environment.test.ts | 12 ++++++++++++ .../docker-compose-environment.ts | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts index ed79a0e24..741e035d6 100644 --- a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts +++ b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts @@ -1,6 +1,7 @@ import fetch from "node-fetch"; import path from "path"; import { DockerComposeEnvironment } from "./docker-compose-environment"; +import { RandomUuid } from "../common"; import { Wait } from "../wait-strategies/wait"; import { PullPolicy } from "../utils/pull-policy"; import { @@ -255,4 +256,15 @@ describe("DockerComposeEnvironment", () => { await startedEnvironment.down(); }); + + it("should use a custom project name if set", async () => { + const customProjectName = `custom-${new RandomUuid().nextUuid()}`; + const startedEnvironment = await new DockerComposeEnvironment(fixtures, "docker-compose.yml") + .withProjectName(customProjectName) + .up(); + + expect(await getRunningContainerNames()).toContain(`${customProjectName}-container-1`); + + await startedEnvironment.down(); + }); }); diff --git a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts index b7f56b0a9..48043fc7a 100644 --- a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts +++ b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts @@ -73,6 +73,11 @@ export class DockerComposeEnvironment { return this; } + public withProjectName(projectName: string): this { + this.projectName = projectName; + return this; + } + public async up(services?: Array): Promise { log.info(`Starting DockerCompose environment "${this.projectName}"...`); const client = await getContainerRuntimeClient(); From a05f61629d1b5c5bf9cda0120a49f9f36b546c73 Mon Sep 17 00:00:00 2001 From: Jameel Al-Aziz Date: Thu, 25 Jul 2024 09:16:10 -0700 Subject: [PATCH 2/2] docs --- docs/features/compose.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/features/compose.md b/docs/features/compose.md index 740750f4b..3046bf6dd 100644 --- a/docs/features/compose.md +++ b/docs/features/compose.md @@ -121,6 +121,16 @@ const environment = await new DockerComposeEnvironment(composeFilePath, composeF .up(); ``` +### With custom project name + +See [project name](https://docs.docker.com/compose/project-name/). + +```javascript +const environment = await new DockerComposeEnvironment(composeFilePath, composeFile) + .withProjectName("test") + .up(); +``` + ## Downing a Docker compose environment Testcontainers by default will not wait until the environment has downed. It will simply issue the down command and return immediately. This is to save time when running tests.