If you find this add-on useful, please star it on GitHub — stars show appreciation and help maintainers know their work matters.
This add-on runs a project-local wildcard DNS resolver for your DDEV project. It maps the configured wildcard domain to the DDEV router, which allows tools running inside the web container, such as Puppeteer and Playwright, to resolve DDEV hostnames properly.
Without it, only the hostnames declared in the project configuration resolve to the router from
inside the container. Any other *.ddev.site subdomain falls through to public DNS, which answers
127.0.0.1, so the request ends up at the container itself rather than at the router.
See the blog post for additional context.
If you have a fixed set of subdomains that need supporting, you can add them explicitly to your
additional_hostnames saving the need to use this add-on, however a restart will be needed for them
to be picked up.
Whereas having the custom DNS should allow it to work for any new domains without issue.
ddev add-on get codebymikey/ddev-wildcard-dns
ddev restart
After installation, make sure to commit the .ddev directory to version control.
The add-on starts a wildcard-dns service and automatically adds that service as a resolver in the
web container during the post-start hook. No manual DNS configuration is required.
The resolver waits for the DDEV router to come up before answering, and if the router is later recreated on a different IP address, for example when another project starts, it picks up the new address automatically.
The default wildcard domain is the project’s DDEV top-level domain, normally ddev.site. For
example, demo.example.ddev.site resolves to the DDEV router when the project uses ddev.site.
| Command | Description |
|---|---|
ddev describe |
View the wildcard DNS service |
ddev logs -s wildcard-dns |
View the local dnsmasq resolver logs |
ddev exec getent hosts demo.demo.ddev.site |
Test resolution from the web container |
The add-on registers the resolver automatically in the web service. To enable wildcard DNS
resolution in another service, add a post-start hook for that service in a project config file,
such as .ddev/config.yaml:
hooks:
post-start:
- service: db
exec: /mnt/ddev_config/wildcard-dns/register-resolver.sh
The script accepts an optional label as its first argument, which is only used to prefix its log output. It defaults to the container hostname.
For a custom service, make sure the project’s .ddev directory is mounted at /mnt/ddev_config
(or adjust the path in the hook). The service image must also provide getent, awk, mktemp,
and sudo, and allow /etc/resolv.conf to be updated. Restart the project after adding the hook:
ddev restart
Set options in the project’s DDEV environment file, then restart the project. The environment file
is project-specific and should be committed with the rest of .ddev:
ddev dotenv set .ddev/.env.wildcard-dns \
--ddev-wildcard-dns-debug=true
ddev restart
Supported variables:
| Variable | ddev dotenv set option |
Default |
|---|---|---|
DDEV_WILDCARD_DNS_DOMAIN |
--ddev-wildcard-dns-domain |
$DDEV_TLD (normally ddev.site) |
DDEV_WILDCARD_DNS_DEBUG |
--ddev-wildcard-dns-debug |
false |
To limit wildcard resolution to the current project, set the domain to the project’s full hostname:
ddev dotenv set .ddev/.env.wildcard-dns \
--ddev-wildcard-dns-domain=my-project.ddev.site
ddev restart
Replace my-project with your DDEV project name.
When debug mode is enabled, dnsmasq logs DNS queries and debug messages. View them with:
ddev logs -s wildcard-dns
Contributed and maintained by @codebymikey
If you find this add-on useful, please star it on GitHub — stars show appreciation and help maintainers know their work matters.