@@ -13,6 +13,7 @@ import (
1313 "path/filepath"
1414 "regexp"
1515 "runtime"
16+ "sort"
1617 "strings"
1718
1819 "github.com/docker/cli/cli"
@@ -384,7 +385,11 @@ func runBuild(dockerCli command.Cli, options buildOptions) error {
384385
385386 configFile := dockerCli .ConfigFile ()
386387 authConfigs , _ := configFile .GetAllCredentials ()
387- buildOptions := imageBuildOptions (dockerCli , options )
388+ proxyConfg := configFile .GetProxyConfig (dockerCli .Client ().DaemonHost ())
389+ if err := applyProxyConfig (options .buildArgs , proxyConfg ); err != nil {
390+ return err
391+ }
392+ buildOptions := imageBuildOptions (options )
388393 buildOptions .Version = types .BuilderV1
389394 buildOptions .Dockerfile = relDockerfile
390395 buildOptions .AuthConfigs = authConfigs
@@ -599,8 +604,7 @@ func replaceDockerfileForContentTrust(ctx context.Context, inputTarStream io.Rea
599604 return pipeReader
600605}
601606
602- func imageBuildOptions (dockerCli command.Cli , options buildOptions ) types.ImageBuildOptions {
603- configFile := dockerCli .ConfigFile ()
607+ func imageBuildOptions (options buildOptions ) types.ImageBuildOptions {
604608 return types.ImageBuildOptions {
605609 Memory : options .memory .Value (),
606610 MemorySwap : options .memorySwap .Value (),
@@ -619,7 +623,7 @@ func imageBuildOptions(dockerCli command.Cli, options buildOptions) types.ImageB
619623 CgroupParent : options .cgroupParent ,
620624 ShmSize : options .shmSize .Value (),
621625 Ulimits : options .ulimits .GetList (),
622- BuildArgs : configFile . ParseProxyConfig ( dockerCli . Client (). DaemonHost (), options .buildArgs .GetAll ()),
626+ BuildArgs : opts . ConvertKVStringsToMapWithNil ( options .buildArgs .GetAll ()),
623627 Labels : opts .ConvertKVStringsToMap (options .labels .GetAll ()),
624628 CacheFrom : options .cacheFrom ,
625629 SecurityOpt : options .securityOpt ,
@@ -630,3 +634,27 @@ func imageBuildOptions(dockerCli command.Cli, options buildOptions) types.ImageB
630634 Platform : options .platform ,
631635 }
632636}
637+
638+ // applyProxyConfig sets proxy environment variables for the container. If a proxy
639+ // environment variable is already set, the existing environment variable is used.
640+ func applyProxyConfig (env opts.ListOpts , proxies map [string ]* string ) error {
641+ keys := make ([]string , 0 , len (proxies ))
642+ for k := range proxies {
643+ keys = append (keys , k )
644+ }
645+ sort .Strings (keys )
646+
647+ m := opts .ConvertKVStringsToMapWithNil (env .GetAll ())
648+ for _ , k := range keys {
649+ if * proxies [k ] == "" {
650+ continue
651+ }
652+ if _ , ok := m [k ]; ok {
653+ continue
654+ }
655+ if err := env .Set (k + "=" + * proxies [k ]); err != nil {
656+ return err
657+ }
658+ }
659+ return nil
660+ }
0 commit comments