Chapter 12. Setting container network modes
The chapter provides information about how to set different network modes.
12.1. Running containers with a static IP Copy linkLink copied to clipboard!
The podman run command with the --ip option sets the container network interface to a particular IP address (for example, 10.88.0.44). To verify that you set the IP address correctly, run the podman inspect command.
Prerequisites
-
The
container-toolsmeta-package is installed.
Procedure
Set the container network interface to the IP address 10.88.0.44:
podman run -d --name=myubi --ip=10.88.0.44 registry.access.redhat.com/ubi9/ubi
# podman run -d --name=myubi --ip=10.88.0.44 registry.access.redhat.com/ubi9/ubi efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Check that the IP address is set properly:
podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi# podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi 10.88.0.44Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.2. Running the DHCP plugin for Netavark using systemd Copy linkLink copied to clipboard!
Prerequisites
-
The
container-toolsmeta-package is installed.
Procedure
Enable the DHCP proxy by using the systemd socket:
systemctl enable --now netavark-dhcp-proxy.socket Created symlink /etc/systemd/system/sockets.target.wants/netavark-dhcp-proxy.socket
/usr/lib/systemd/system/netavark-dhcp-proxy.socket. systemctl enable --now netavark-dhcp-proxy.socket Created symlink /etc/systemd/system/sockets.target.wants/netavark-dhcp-proxy.socket/usr/lib/systemd/system/netavark-dhcp-proxy.socket. Copy to Clipboard Copied! Toggle word wrap Toggle overflow Optional: Display the socket unit file:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a macvlan network and specify your host interface with it. Typically, it is your external interface:
podman network create -d macvlan --interface-name <LAN_INTERFACE> mv1
# podman network create -d macvlan --interface-name <LAN_INTERFACE> mv1 mv1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Run the container by using newly created network:
podman run --rm --network mv1 -d --name test alpine top
# podman run --rm --network mv1 -d --name test alpine top 894ae3b6b1081aca2a5d90a9855568eaa533c08a174874be59569d4656f9bc45Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Confirm the container has an IP on your local subnet:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Inspect the container to verify it uses correct IP addresses:
podman container inspect test --format {{.NetworkSettings.Networks.mv1.IPAddress}}# podman container inspect test --format {{.NetworkSettings.Networks.mv1.IPAddress}} 192.168.188.36Copy to Clipboard Copied! Toggle word wrap Toggle overflow
When attempting to connect to this IP address, ensure the connection is made from a different host. Connections from the same host are not supported when using macvlan networking.
12.3. Running the DHCP plugin for CNI using systemd Copy linkLink copied to clipboard!
You can use the systemd unit file to run the dhcp plugin.
Prerequisites
-
The
container-toolsmeta-package is installed.
Procedure
Optional: Make sure you re sign the CNI network stack:
podman info --format "{{.Host.NetworkBackend}}"# podman info --format "{{.Host.NetworkBackend}}" cniCopy to Clipboard Copied! Toggle word wrap Toggle overflow Enable the DHCP proxy by using the systemd socket:
systemctl enable --now cni-dhcp.socket
# systemctl enable --now cni-dhcp.socket Created symlink /etc/systemd/system/sockets.target.wants/cni-dhcp.socket/usr/lib/systemd/system/cni-dhcp.socket. Copy to Clipboard Copied! Toggle word wrap Toggle overflow Optional: Display the socket unit file:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Check the status of the socket:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4. The macvlan plugin Copy linkLink copied to clipboard!
Most of the container images do not have a DHCP client, the dhcp plugin acts as a proxy DHCP client for the containers to interact with a DHCP server.
The host system does not have network access to the container. To allow network connections from outside the host to the container, the container has to have an IP on the same network as the host. The macvlan plugin enables you to connect a container to the same network as the host.
This procedure only applies to rootfull containers. Rootless containers are not able to use the macvlan and dhcp plugins.
You can create a macvlan network using the podman network create --driver=macvlan command.
12.5. Switching the network stack from CNI to Netavark Copy linkLink copied to clipboard!
Previously, containers were able to use DNS only when connected to the single Container Network Interface (CNI) plugin. Netavark is a network stack for containers. You can use Netavark with Podman and other Open Container Initiative (OCI) container management applications. The advanced network stack for Podman is compatible with advanced Docker functionalities. Now, containers in multiple networks access containers on any of those networks.
Netavark is capable of the following:
- Create, manage, and remove network interfaces, including bridge and MACVLAN interfaces.
- Configure firewall settings, such as network address translation (NAT) and port mapping rules.
- Support IPv4 and IPv6.
- Improve support for containers in multiple networks.
The CNI network stack is deprecated and will be removed in a future RHEL release. Use the Netavark network stack instead.
Prerequisites
-
The
container-toolsmeta-package is installed.
Procedure
If the
/etc/containers/containers.conffile does not exist, copy the/usr/share/containers/containers.conffile to the/etc/containers/directory:cp /usr/share/containers/containers.conf /etc/containers/
# cp /usr/share/containers/containers.conf /etc/containers/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Edit the
/etc/containers/containers.conffile, and add the following content to the[network]section:network_backend="netavark"
network_backend="netavark"Copy to Clipboard Copied! Toggle word wrap Toggle overflow If you have any containers or pods, reset the storage back to the initial state:
podman system reset
# podman system resetCopy to Clipboard Copied! Toggle word wrap Toggle overflow Reboot the system:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Verify that the network stack is changed to Netavark:
cat /etc/containers/containers.conf ... [network] network_backend="netavark" ...
# cat /etc/containers/containers.conf ... [network] network_backend="netavark" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
If you are using Podman 4.0.0 or later, use the podman info command to check the network stack setting.
12.6. Switching the network stack from Netavark to CNI Copy linkLink copied to clipboard!
You can switch the network stack from Netavark to CNI.
The CNI network stack is deprecated and will be removed in a future RHEL release. Use the Netavark network stack instead.
Prerequisites
-
The
container-toolsmeta-package is installed.
Procedure
If the
/etc/containers/containers.conffile does not exist, copy the/usr/share/containers/containers.conffile to the/etc/containers/directory:cp /usr/share/containers/containers.conf /etc/containers/
# cp /usr/share/containers/containers.conf /etc/containers/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Edit the
/etc/containers/containers.conffile, and add the following content to the[network]section:network_backend="cni"
network_backend="cni"Copy to Clipboard Copied! Toggle word wrap Toggle overflow If you have any containers or pods, reset the storage back to the initial state:
podman system reset
# podman system resetCopy to Clipboard Copied! Toggle word wrap Toggle overflow Reboot the system:
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Verify that the network stack is changed to CNI:
cat /etc/containers/containers.conf ... [network] network_backend="cni" ...
# cat /etc/containers/containers.conf ... [network] network_backend="cni" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
If you are using Podman 4.0.0 or later, use the podman info command to check the network stack setting.