build: skip "host-gateway" validation with moby driver

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
pull/1446/head
CrazyMax 2 years ago
parent e91d5326fe
commit 49d46e71de
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7

@ -615,7 +615,7 @@ func toSolveOpt(ctx context.Context, di DriverInfo, multiDriver bool, opt Option
} }
// setup extrahosts // setup extrahosts
extraHosts, err := toBuildkitExtraHosts(opt.ExtraHosts) extraHosts, err := toBuildkitExtraHosts(opt.ExtraHosts, d.IsMobyDriver())
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

@ -11,8 +11,14 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// archiveHeaderSize is the number of bytes in an archive header const (
const archiveHeaderSize = 512 // archiveHeaderSize is the number of bytes in an archive header
archiveHeaderSize = 512
// mobyHostGatewayName defines a special string which users can append to
// --add-host to add an extra entry in /etc/hosts that maps
// host.docker.internal to the host IP
mobyHostGatewayName = "host-gateway"
)
func isLocalDir(c string) bool { func isLocalDir(c string) bool {
st, err := os.Stat(c) st, err := os.Stat(c)
@ -39,18 +45,23 @@ func isArchive(header []byte) bool {
} }
// toBuildkitExtraHosts converts hosts from docker key:value format to buildkit's csv format // toBuildkitExtraHosts converts hosts from docker key:value format to buildkit's csv format
func toBuildkitExtraHosts(inp []string) (string, error) { func toBuildkitExtraHosts(inp []string, mobyDriver bool) (string, error) {
if len(inp) == 0 { if len(inp) == 0 {
return "", nil return "", nil
} }
hosts := make([]string, 0, len(inp)) hosts := make([]string, 0, len(inp))
for _, h := range inp { for _, h := range inp {
parts := strings.Split(h, ":") host, ip, ok := strings.Cut(h, ":")
if !ok || host == "" || ip == "" {
if len(parts) != 2 || parts[0] == "" || net.ParseIP(parts[1]) == nil {
return "", errors.Errorf("invalid host %s", h) return "", errors.Errorf("invalid host %s", h)
} }
hosts = append(hosts, parts[0]+"="+parts[1]) // Skip IP address validation for "host-gateway" string with moby driver
if !mobyDriver || ip != mobyHostGatewayName {
if net.ParseIP(ip) == nil {
return "", errors.Errorf("invalid host %s", h)
}
}
hosts = append(hosts, host+"="+ip)
} }
return strings.Join(hosts, ","), nil return strings.Join(hosts, ","), nil
} }

Loading…
Cancel
Save