The dnsname plugin allows containers to resolve each other by name. The plugin adds each container's name to an instance of a dnsmasq server. The plugin is enabled through adding it to a network's CNI configuration. The containers will only be able to resolve each other if they are on the same CNI network.
Note: This plugin does not work with rootless containers.
This tutorial assumes you already have Podman, containernetwork-plugins, and a golang development environment installed.
Using your package manager, install the dnsmasq package. For Fedora, this would be:
sudo dnf install dnsmasq
- using git, clone the github.com/containers/dnsname repository.
- make install PREFIX=/usr -- this will install the dnsname plugin into /usr/libexec/cni where your CNI plugins should already exist.
- Create a new network using
podman network create
. For example,podman network create foobar
will suffice. - Using your favorite editor, edit
/etc/cni/net.d/foobar.conflist
and add the following with the plugins stanza:
{
"type": "dnsname",
"domainName": "podman.io"
}
The following example configuration file shows a usable example for Podman.
-
sudo podman run -dt --name web --network foobar quay.io/libpod/alpine_nginx:latest 5139d65d22135e9ecab511559d863754550894a32285befd94dab231017048c2
Note: we use the --network foobar here. Also, in this test image, the nginx server will respond with podman rulez on an http request.
-
sudo podman run -it --name client --network cni-podman1 quay.io/libpod/alpine_nginx:latest curl http://web/ podman rulez
After making sure the dnsplugin is functioning properly, you can add name resolution to your default Podman network. This can be done two different ways:
-
Add the dnsname plugin as described in above to your default Podman network. This default network is usually
/etc/cni/net.d/87-podman-bridge.conflist
. -
Add a new network as described above and then edit
/etc/containers/libpod.conf
and change thecni_default_network
key to your network name.