Skip to content

Commit fb1a011

Browse files
committed
Add explicit cleanup for Docker network monitor autoruns
The DNS server and tunnel container connections weren't cleaned up. The existing dispose stopped any further events starting, which helps, but pending events doing async work (getting network aliases) could have resulted in changes after the monitor was shutdown. Disposing all connections avoids this.
1 parent eb1a3a2 commit fb1a011

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/interceptors/docker/docker-networking.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,17 @@ export async function monitorDockerNetworkAliases(proxyPort: number): Promise<Do
104104
const networkMonitor = new DockerNetworkMonitor(docker, proxyPort, stream);
105105

106106
// We update DNS immediately, and on all changes:
107-
mobx.autorun(() => dnsServer.setHosts(networkMonitor.aliasIpMap));
107+
const dnsDisposer = mobx.autorun(() => dnsServer.setHosts(networkMonitor.aliasIpMap));
108+
networkMonitor.addDisposer(dnsDisposer);
108109

109110
// We update tunnel _only_ once something is actually intercepted - once interceptedNetworks changes.
110111
// We don't want to create the tunnel container unless Docker interception is actually used.
111-
mobx.reaction(
112+
const tunnelDisposer = mobx.reaction(
112113
() => networkMonitor.interceptedNetworks,
113114
(interceptedNetworks) => updateDockerTunnelledNetworks(proxyPort, interceptedNetworks)
114115
.catch(console.warn)
115116
);
117+
networkMonitor.addDisposer(tunnelDisposer);
116118

117119
dockerNetworkMonitors[proxyPort] = networkMonitor;
118120

@@ -194,8 +196,15 @@ class DockerNetworkMonitor {
194196
this.refreshAllNetworks();
195197
}
196198

199+
private disposers: Array<() => void> = [];
200+
201+
addDisposer(disposer: () => void) {
202+
this.disposers.push(disposer);
203+
}
204+
197205
async stop() {
198206
this.dockerEventStream.removeListener('data', this.onEvent);
207+
this.disposers.forEach(d => d());
199208
}
200209

201210
private readonly networkTargets: {

0 commit comments

Comments
 (0)