@@ -25,7 +25,7 @@ import (
2525	"errors" 
2626	"fmt" 
2727	"io" 
28- 	"math/rand " 
28+ 	"io/fs " 
2929	"os" 
3030	"os/exec" 
3131	"path/filepath" 
@@ -40,6 +40,7 @@ import (
4040	"github.com/docker/cli/cli/command/image/build" 
4141	"github.com/docker/compose/v2/pkg/api" 
4242	"github.com/docker/compose/v2/pkg/progress" 
43+ 	"github.com/google/uuid" 
4344	"github.com/moby/buildkit/client" 
4445	gitutil "github.com/moby/buildkit/frontend/dockerfile/dfgitutil" 
4546	"github.com/moby/buildkit/util/progress/progressui" 
@@ -282,13 +283,20 @@ func (s *composeService) doBuildBake(ctx context.Context, project *types.Project
282283	}
283284	logrus .Debugf ("bake build config:\n %s" , string (b ))
284285
286+ 	tmpdir  :=  os .TempDir ()
285287	var  metadataFile  string 
286288	for  {
287289		// we don't use os.CreateTemp here as we need a temporary file name, but don't want it actually created 
288290		// as bake relies on atomicwriter and this creates conflict during rename 
289- 		metadataFile  =  filepath .Join (os .TempDir (), fmt .Sprintf ("compose-build-metadataFile-%d.json" , rand .Int31 ()))
290- 		if  _ , err  =  os .Stat (metadataFile ); os .IsNotExist (err ) {
291- 			break 
291+ 		metadataFile  =  filepath .Join (tmpdir , fmt .Sprintf ("compose-build-metadataFile-%s.json" , uuid .New ().String ()))
292+ 		if  _ , err  =  os .Stat (metadataFile ); err  !=  nil  {
293+ 			if  os .IsNotExist (err ) {
294+ 				break 
295+ 			}
296+ 			var  pathError  * fs.PathError 
297+ 			if  errors .As (err , & pathError ) {
298+ 				return  nil , fmt .Errorf ("can't acces os.tempDir %s: %w" , tmpdir , pathError .Err )
299+ 			}
292300		}
293301	}
294302	defer  func () {
@@ -361,9 +369,12 @@ func (s *composeService) doBuildBake(ctx context.Context, project *types.Project
361369		if  readErr  !=  nil  {
362370			if  readErr  ==  io .EOF  {
363371				break 
364- 			} else  {
365- 				return  nil , fmt .Errorf ("failed to execute bake: %w" , readErr )
366372			}
373+ 			if  errors .Is (readErr , os .ErrClosed ) {
374+ 				logrus .Debugf ("bake stopped" )
375+ 				break 
376+ 			}
377+ 			return  nil , fmt .Errorf ("failed to execute bake: %w" , readErr )
367378		}
368379		decoder  :=  json .NewDecoder (strings .NewReader (line ))
369380		var  status  client.SolveStatus 
0 commit comments