Skip to content

Commit b782c3f

Browse files
committed
Handle failed Docker startup from unusable CERT_PATH (+HOST) env vars
1 parent 61e11c6 commit b782c3f

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

src/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,17 @@ function manageBackgroundServices(
7070
httpsConfig: { certPath: string, certContent: string }
7171
) {
7272
standalone.on('mock-server-started', async (server) => {
73-
startDockerInterceptionServices(server.port, httpsConfig, ruleParameters);
73+
startDockerInterceptionServices(server.port, httpsConfig, ruleParameters)
74+
.catch((error) => {
75+
console.log("Could not start Docker components:", error);
76+
});
7477
});
7578

7679
standalone.on('mock-server-stopping', (server) => {
77-
stopDockerInterceptionServices(server.port, ruleParameters);
80+
stopDockerInterceptionServices(server.port, ruleParameters)
81+
.catch((error) => {
82+
console.log("Could not stop Docker components:", error);
83+
});
7884
});
7985
}
8086

src/interceptors/docker/docker-interception-services.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ import {
2020
stopDockerTunnel,
2121
} from './docker-tunnel-proxy';
2222

23-
export const isDockerAvailable = () => new Docker().ping().then(() => true).catch(() => false);
23+
export const isDockerAvailable = () =>
24+
(async () => new Docker().ping())() // Catch sync & async setup errors
25+
.then(() => true)
26+
.catch(() => false);
2427

2528
const IPv4_IPv6_PREFIX = "::ffff:";
2629

src/interceptors/docker/docker-interceptor.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ export class DockerContainerInterceptor implements Interceptor {
2020
private config: HtkConfig
2121
) {}
2222

23-
private docker = new Docker();
23+
private _docker: Docker | undefined;
24+
private getDocker() {
25+
if (!this._docker) {
26+
this._docker = new Docker();
27+
}
28+
return this._docker;
29+
}
2430

2531
async isActivable(): Promise<boolean> {
2632
return isDockerAvailable();
@@ -32,7 +38,7 @@ export class DockerContainerInterceptor implements Interceptor {
3238
// We cache the containers query whilst it's active, because this gets hit a lot,
3339
// usually directly in parallel by getMetadata and isActive, and this ensures
3440
// that concurrent calls all just run one lookup and use the same result.
35-
this._containersPromise = this.docker.listContainers()
41+
this._containersPromise = this.getDocker().listContainers()
3642
.finally(() => { this._containersPromise = undefined; });
3743
}
3844
return this._containersPromise;
@@ -70,7 +76,7 @@ export class DockerContainerInterceptor implements Interceptor {
7076
} as const;
7177

7278
ensureDockerServicesRunning(proxyPort);
73-
await restartAndInjectContainer(this.docker, options.containerId, interceptionSettings);
79+
await restartAndInjectContainer(this.getDocker(), options.containerId, interceptionSettings);
7480
}
7581

7682
async isActive(proxyPort: number): Promise<boolean> {

0 commit comments

Comments
 (0)