====== Docker Firewall Configuration (firewalld) ======
===== Why are these commands needed? =====
The following commands are essential to allow Docker containers to communicate properly with the external network when using **firewalld** as the system firewall:
sudo firewall-cmd --add-masquerade --permanent
sudo firewall-cmd --reload
sudo systemctl restart docker
===== Detailed Explanation =====
=== 1. Masquerade (NAT) ===
**Command:** sudo firewall-cmd --add-masquerade --permanent
**Why it's needed:**
* Docker uses internal virtual networks for containers
* Containers have private IP addresses (typically in the 172.17.0.0/16 range)
* **Masquerade** (NAT - Network Address Translation) enables:
- Containers to access the internet
- Outbound traffic to use the host's IP address
- Inbound connections to be routed to the correct containers
**Analogy:** Like a post office that receives mail for apartments in a building and delivers it to the correct recipients.
=== 2. Reload firewall ===
**Command:** sudo firewall-cmd --reload
**Why it's needed:**
* Applies configuration changes made with the ''--permanent'' option
* Firewall rules become immediately active
* Ensures settings persist after reboot
=== 3. Restart Docker ===
**Command:** sudo systemctl restart docker
**Why it's needed:**
* Docker needs to detect the new firewall rules
* Reloads network configuration
* Ensures new containers will benefit from updated settings
===== What happens without these settings? =====
* Containers **cannot access the internet**
* Services in containers **are not accessible from outside**
* Network connections fail
* Port forwarding doesn't work correctly
===== Practical Example =====
After running these commands, you can run:
docker run -p 80:80 nginx
And the nginx server will be accessible from your network at: http://host-ip-address
===== Verification =====
To verify that masquerade is enabled:
firewall-cmd --query-masquerade
Should return ''yes''.
===== Important Notes =====
* These settings are only needed if you use **firewalld**
* On systems with direct iptables, Docker manages rules automatically
* Settings are persistent due to the ''--permanent'' option
===== Additional Resources =====
* [[https://docs.docker.com/network/|Official Docker Networking Documentation]]
* [[https://firewalld.org/documentation/|firewalld Documentation]]
======