@@ -526,6 +526,35 @@ func startDockerdInGvisor(ctx context.Context, t *testing.T, overlay bool) *dock
526526 return d
527527}
528528
529+ // checkDockerImage list available images and checks if the given image is
530+ // present.
531+ func checkDockerImage (ctx context.Context , imageName string , d * dockerutil.Container ) error {
532+ listImages , err := d .ExecProcess (ctx , dockerutil.ExecOpts {}, "/bin/sh" , "-c" , "docker images" )
533+ if err != nil {
534+ return fmt .Errorf ("docker exec failed: %v" , err )
535+ }
536+ got , err := listImages .Logs ()
537+ if err != nil {
538+ return fmt .Errorf ("docker logs failed: %v" , err )
539+ }
540+ if ! strings .Contains (got , imageName ) {
541+ return fmt .Errorf ("docker didn't get expected image: %q, got: %q" , imageName , got )
542+ }
543+ return nil
544+ }
545+
546+ func removeDockerImage (ctx context.Context , imageName string , d * dockerutil.Container ) error {
547+ cmd := []string {"docker" , "image" , "rm" , imageName }
548+ _ , err := d .ExecProcess (
549+ ctx ,
550+ dockerutil.ExecOpts {},
551+ "/bin/sh" , "-c" , strings .Join (cmd , " " ))
552+ if err != nil {
553+ return fmt .Errorf ("docker exec failed: %v" , err )
554+ }
555+ return nil
556+ }
557+
529558func testDockerRun (ctx context.Context , t * testing.T , d * dockerutil.Container , opts dockerCommandOptions ) {
530559 cmd := []string {"docker" , "run" , "--rm" }
531560 if opts .hostNetwork {
@@ -550,27 +579,24 @@ func testDockerRun(ctx context.Context, t *testing.T, d *dockerutil.Container, o
550579}
551580
552581func testDockerBuild (ctx context.Context , t * testing.T , d * dockerutil.Container , opts dockerCommandOptions ) {
553- cmd := []string {"echo" , "-e" , fmt .Sprintf ("FROM %s\n RUN apk add git" , testAlpineImage ), "|" , "docker" , "build" }
582+ parts := []string {"echo" , fmt .Sprintf ("\" FROM %s\n RUN apk add git\" " , testAlpineImage ), "|" , "docker" , "build" }
554583 if opts .hostNetwork {
555- cmd = append (cmd , "--network" , "host" )
556- }
557- imageName := "test_docker_build_in_gvisor"
558- cmd = append (cmd , "-t" , imageName , "-f" , "-" , "." )
559- _ , err := d .ExecProcess (ctx , dockerutil.ExecOpts {}, cmd ... )
560- if err != nil {
561- t .Fatalf ("docker exec failed: %v" , err )
584+ parts = append (parts , "--network" , "host" )
562585 }
563- inspectImage , err := d .ExecProcess (ctx , dockerutil.ExecOpts {}, []string {"docker" , "image" , "inspect" , imageName }... )
586+ imageName := strings .ToLower (strings .ReplaceAll (testutil .RandomID ("test_docker_build" ), "/" , "-" ))
587+ parts = append (parts , "-t" , imageName , "-f" , "-" , "." )
588+ cmd := strings .Join (parts , " " )
589+ dockerBuildProc , err := d .ExecProcess (ctx , dockerutil.ExecOpts {}, "/bin/sh" , "-c" , cmd )
564590 if err != nil {
565591 t .Fatalf ("docker exec failed: %v" , err )
566592 }
567- got , err := inspectImage .Logs ()
593+ _ , err = dockerBuildProc .Logs ()
568594 if err != nil {
569595 t .Fatalf ("docker logs failed: %v" , err )
570596 }
571- output := imageName + ":latest"
572- if ! strings . Contains ( got , output ) {
573- t .Fatalf ("docker didn't get output expected : %q, got: %q " , output , got )
597+ defer removeDockerImage ( ctx , imageName , d )
598+ if err := checkDockerImage ( ctx , imageName , d ); err != nil {
599+ t .Fatalf ("failed to find docker image : %v " , err )
574600 }
575601}
576602
0 commit comments