lima-vm/lima · error
failed to apply DNS configuration: %w
Error message
failed to apply DNS configuration: %w
What it means
Raised by processUserData when `manage_resolv_conf: true` with a `resolv_conf` block is set, but the macOS `networksetup -setdnsservers Ethernet ...` command fails in setResolvConf. The command output is wrapped into the underlying error. Note the primary network interface is hardcoded to "Ethernet".
Source
Thrown at pkg/guestagent/fakecloudinit/fakecloudinit_darwin.go:131
}
if userData.Timezone != "" {
if err = setTimezone(ctx, userData.Timezone); err != nil {
errs = append(errs, fmt.Errorf("failed to set timezone: %w", err))
}
}
for _, u := range userData.Users {
if err := createUser(ctx, &u); err != nil {
errs = append(errs, fmt.Errorf("failed to create user %#q: %w", u.Name, err))
}
}
for _, entry := range userData.WriteFiles {
if err := writeFiles(ctx, entry); err != nil {
errs = append(errs, fmt.Errorf("failed to write file for path %#q: %w", entry.Path, err))
}
}
if userData.ManageResolvConf && userData.ResolvConf != nil {
if err = setResolvConf(ctx, userData.ResolvConf); err != nil {
errs = append(errs, fmt.Errorf("failed to apply DNS configuration: %w", err))
}
}
if userData.CACerts != nil {
logrus.Warn("ca_certs is not implemented")
}
if len(userData.BootCmd) > 0 {
logrus.Warn("bootcmd is not implemented")
}
return errors.Join(errs...)
}
// mountFSTabEntry mounts a filesystem based on the given fstab entry.
// The format mimics Linux's convention.
// The entries are not written to /etc/fstab.
func mountFSTabEntry(m []string) error {
if len(m) != 6 {
return fmt.Errorf("invalid fstab entry: expected 6 fields, got %d: %v", len(m), m)
}View on GitHub (pinned to dd909d0973)
Solutions
- Check the wrapped networksetup output in the error message.
- Verify the network service list in the VM (`networksetup -listallnetworkservices`); the implementation hardcodes "Ethernet".
- Remove `manage_resolv_conf` from user-data if DNS is already configured correctly by the image.
- Use plain IP addresses for nameservers entries.
- Rename or create an "Ethernet" network service in the guest as a workaround.
Example fix
// before (user-data) manage_resolv_conf: true resolv_conf: nameservers: ["dns.example.internal"] // after manage_resolv_conf: true resolv_conf: nameservers: ["10.0.2.3"]
Defensive patterns
Strategy: fallback
Validate before calling
func validateResolvConf(rc *cloudinittypes.ResolvConf) error {
if rc == nil { return nil }
for _, ns := range rc.Nameservers {
if net.ParseIP(ns) == nil { return fmt.Errorf("nameserver %q is not an IP", ns) }
}
return nil
} Type guard
func isIPNameservers(rc *cloudinittypes.ResolvConf) bool {
if rc == nil { return true }
for _, ns := range rc.Nameservers { if net.ParseIP(ns) == nil { return false } }
return true
} Try / catch
if userData.ManageResolvConf && userData.ResolvConf != nil {
if err := setResolvConf(ctx, userData.ResolvConf); err != nil {
log.Warnf("DNS not applied; falling back to image defaults: %v", err)
}
} Prevention
- Use IP literals, not hostnames, for nameservers.
- Confirm the guest has a network service named "Ethernet" (the implementation hardcodes it).
- Skip manage_resolv_conf when the image already configures DNS.
- Remember the primary network name is hardcoded - check `networksetup -listallnetworkservices` in the guest.
When it happens
Trigger: The user-data sets manage_resolv_conf/resolv_conf and the networksetup command returns non-zero: the service named "Ethernet" does not exist on the guest, DNS server entries are malformed, or networksetup lacks privileges.
Common situations: A macOS guest whose primary network service is named differently (e.g. "Wi-Fi", "USB 10/100/1000 LAN"), which is common with custom or newer images; or invalid nameserver values in the resolv_conf block.
Related errors
- failed to enable SSHD: %w
- failed to mount fstab entry %v: %w
- failed to set timezone: %w
- failed to create user %#q: %w
- failed to write file for path %#q: %w
AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01).
Data as JSON: /api/errors/788971632ba22650.
Report an issue: GitHub.