@@ -33,6 +33,7 @@ import { Wait } from "../wait-strategies/wait";
3333import { waitForContainer } from "../wait-strategies/wait-for-container" ;
3434import { WaitStrategy } from "../wait-strategies/wait-strategy" ;
3535import { GenericContainerBuilder } from "./generic-container-builder" ;
36+ import { inspectContainerUntilPortsExposed } from "./inspect-container-util-ports-exposed" ;
3637import { StartedGenericContainer } from "./started-generic-container" ;
3738
3839const reusableContainerCreationLock = new AsyncLock ( ) ;
@@ -141,8 +142,13 @@ export class GenericContainer implements TestContainer {
141142 if ( ! inspectResult . State . Running ) {
142143 log . debug ( "Reused container is not running, attempting to start it" ) ;
143144 await client . container . start ( container ) ;
144- // Refetch the inspect result to get the updated state
145- inspectResult = await client . container . inspect ( container ) ;
145+ inspectResult = (
146+ await inspectContainerUntilPortsExposed (
147+ ( ) => client . container . inspect ( container ) ,
148+ this . exposedPorts ,
149+ container . id
150+ )
151+ ) . inspectResult ;
146152 }
147153
148154 const mappedInspectResult = mapInspectResult ( inspectResult ) ;
@@ -196,8 +202,11 @@ export class GenericContainer implements TestContainer {
196202 await client . container . start ( container ) ;
197203 log . info ( `Started container for image "${ this . createOpts . Image } "` , { containerId : container . id } ) ;
198204
199- const inspectResult = await client . container . inspect ( container ) ;
200- const mappedInspectResult = mapInspectResult ( inspectResult ) ;
205+ const { inspectResult, mappedInspectResult } = await inspectContainerUntilPortsExposed (
206+ ( ) => client . container . inspect ( container ) ,
207+ this . exposedPorts ,
208+ container . id
209+ ) ;
201210 const boundPorts = BoundPorts . fromInspectResult ( client . info . containerRuntime . hostIps , mappedInspectResult ) . filter (
202211 this . exposedPorts
203212 ) ;
@@ -361,7 +370,7 @@ export class GenericContainer implements TestContainer {
361370 public withExposedPorts ( ...ports : PortWithOptionalBinding [ ] ) : this {
362371 const exposedPorts : { [ port : string ] : Record < string , never > } = { } ;
363372 for ( const exposedPort of ports ) {
364- exposedPorts [ getContainerPort ( exposedPort ) . toString ( ) ] = { } ;
373+ exposedPorts [ ` ${ getContainerPort ( exposedPort ) . toString ( ) } /tcp` ] = { } ;
365374 }
366375
367376 this . exposedPorts = [ ...this . exposedPorts , ...ports ] ;
@@ -373,9 +382,9 @@ export class GenericContainer implements TestContainer {
373382 const portBindings : Record < string , Array < Record < string , string > > > = { } ;
374383 for ( const exposedPort of ports ) {
375384 if ( hasHostBinding ( exposedPort ) ) {
376- portBindings [ exposedPort . container ] = [ { HostPort : exposedPort . host . toString ( ) } ] ;
385+ portBindings [ ` ${ exposedPort . container } /tcp` ] = [ { HostPort : exposedPort . host . toString ( ) } ] ;
377386 } else {
378- portBindings [ exposedPort ] = [ { HostPort : "0" } ] ;
387+ portBindings [ ` ${ exposedPort } /tcp` ] = [ { HostPort : "0" } ] ;
379388 }
380389 }
381390
0 commit comments