@@ -14,13 +14,31 @@ interface CreateContainerOptions {
1414 environment ?: Record < string , string >
1515}
1616
17- async function createContainer ( { image, containerName, ports, environment } : CreateContainerOptions ) {
17+ async function ensureImageExists ( image : string ) {
18+ try {
19+ // Check if image exists locally
20+ const { stdout } = await execFile ( 'docker' , [ 'images' , '-q' , image ] )
21+ if ( stdout . toString ( ) . trim ( ) ) {
22+ return // Image exists, no need to pull
23+ }
24+ } catch {
25+ // Image doesn't exist or error checking, proceed to pull
26+ }
27+
28+ // Pull the image if it doesn't exist
29+ await execFile ( 'docker' , [ 'pull' , image ] )
30+ }
31+
32+ export async function createContainer ( { image, containerName, ports, environment } : CreateContainerOptions ) {
1833 if ( containersCreated . has ( containerName ) ) {
1934 return containersCreated . get ( containerName ) !
2035 }
2136
2237 const promise = ( async ( ) => {
2338 try {
39+ // Ensure the image exists before running
40+ await ensureImageExists ( image )
41+
2442 await execFile ( 'docker' , [
2543 'run' ,
2644 '--name' ,
@@ -50,7 +68,7 @@ async function createContainer({ image, containerName, ports, environment }: Cre
5068 return promise
5169}
5270
53- async function waitForContainer ( containerName : string , expectedMessage : string ) {
71+ export async function waitForContainer ( containerName : string , expectedMessage : string ) {
5472 if ( containersStarted . has ( containerName ) ) {
5573 return containersStarted . get ( containerName ) !
5674 }
@@ -82,7 +100,7 @@ async function waitForContainer(containerName: string, expectedMessage: string)
82100
83101export const getPostgresConnection = async ( { containerName, port } : { containerName : string ; port : number } ) => {
84102 await createContainer ( {
85- image : 'postgres' ,
103+ image : 'postgres:16-alpine ' ,
86104 containerName,
87105 ports : [ port , 5432 ] ,
88106 environment : {
0 commit comments