rootless: add the built-in slirp DNS server

add the slirp built-in DNS server when using slirp4netns.

Closes: https://github.com/containers/buildah/issues/1660

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>

Closes: #1688
Approved by: TomSweeneyRedHat
This commit is contained in:
Giuseppe Scrivano 2019-06-24 12:24:33 +02:00 committed by Atomic Bot
parent 0c8bb1d1ce
commit 4d9da85473
1 changed files with 12 additions and 2 deletions

View File

@ -175,7 +175,7 @@ func (b *Builder) Run(command []string, options RunOptions) error {
} }
if !(contains(volumes, "/etc/resolv.conf") || (len(b.CommonBuildOpts.DNSServers) == 1 && strings.ToLower(b.CommonBuildOpts.DNSServers[0]) == "none")) { if !(contains(volumes, "/etc/resolv.conf") || (len(b.CommonBuildOpts.DNSServers) == 1 && strings.ToLower(b.CommonBuildOpts.DNSServers[0]) == "none")) {
resolvFile, err := b.addNetworkConfig(path, "/etc/resolv.conf", rootIDPair, b.CommonBuildOpts.DNSServers, b.CommonBuildOpts.DNSSearch, b.CommonBuildOpts.DNSOptions) resolvFile, err := b.addNetworkConfig(path, "/etc/resolv.conf", rootIDPair, b.CommonBuildOpts.DNSServers, b.CommonBuildOpts.DNSSearch, b.CommonBuildOpts.DNSOptions, namespaceOptions)
if err != nil { if err != nil {
return err return err
} }
@ -462,7 +462,7 @@ func (b *Builder) setupMounts(mountPoint string, spec *specs.Spec, bundlePath st
} }
// addNetworkConfig copies files from host and sets them up to bind mount into container // addNetworkConfig copies files from host and sets them up to bind mount into container
func (b *Builder) addNetworkConfig(rdir, hostPath string, chownOpts *idtools.IDPair, dnsServers, dnsSearch, dnsOptions []string) (string, error) { func (b *Builder) addNetworkConfig(rdir, hostPath string, chownOpts *idtools.IDPair, dnsServers, dnsSearch, dnsOptions []string, namespaceOptions NamespaceOptions) (string, error) {
stat, err := os.Stat(hostPath) stat, err := os.Stat(hostPath)
if err != nil { if err != nil {
return "", errors.Wrapf(err, "error statting %q for container %q", hostPath, b.ContainerID) return "", errors.Wrapf(err, "error statting %q for container %q", hostPath, b.ContainerID)
@ -479,6 +479,16 @@ func (b *Builder) addNetworkConfig(rdir, hostPath string, chownOpts *idtools.IDP
if len(dnsSearch) > 0 { if len(dnsSearch) > 0 {
search = dnsSearch search = dnsSearch
} }
if b.Isolation == IsolationOCIRootless {
ns := namespaceOptions.Find(string(specs.NetworkNamespace))
if ns != nil && !ns.Host && ns.Path == "" {
// if we are using slirp4netns, also add the built-in DNS server.
logrus.Debugf("adding slirp4netns 10.0.2.3 built-in DNS server")
nameservers = append([]string{"10.0.2.3"}, nameservers...)
}
}
if len(dnsServers) != 0 { if len(dnsServers) != 0 {
dns, err := getDNSIP(dnsServers) dns, err := getDNSIP(dnsServers)
if err != nil { if err != nil {