Acabo de instalar la última versión de docker-ce en CentOS, pero yo no se puede acceder a los puertos publicados desde un servidor vecino y no puede llegar al exterior desde el propio contenedor.
Ejecutando un CentOS 8 de vainilla simple con NetworkManager y FirewallD habilitados. La zona de firewall predeterminada es public.
Versiones:
docker-ce 19.03.3 (RPM oficial de Docker)
containerd.io 1.2.6 (RPM oficial de Docker para CentOS 7 - aún no disponible para CentOS 8)
Lo que falta en las respuestas anteriores es el hecho de que primero debe agregar su interfaz docker a la zona que configura, por ejemplo, pública (o agregarla a la zona "confiable" que se sugirió aqui pero dudo que sea prudente, desde una perspectiva de seguridad). Porque por defecto no está asignado a una zona. También recuerde volver a cargar el demonio de la ventana acoplable cuando haya terminado.
# Check what interface docker is using, e.g. 'docker0'ip link show# Check available firewalld zones, e.g. 'public'sudo firewall-cmd --get-active-zones# Check what zone the docker interface it bound to, most likely 'no zone' yetsudo firewall-cmd --get-zone-of-interface=docker0# So add the 'docker0' interface to the 'public' zone. Changes will be visible only after firewalld reloadsudo nmcli connection modify docker0 connection.zone public# Masquerading allows for docker ingress and egress (this is the juicy bit)sudo firewall-cmd --zone=public --add-masquerade --permanent# Optional open required incomming ports (wasn't required in my tests)# sudo firewall-cmd --zone=public --add-port=443/tcp# Reload firewalldsudo firewall-cmd --reload# Reload dockerdsudo systemctl restart docker# Test ping and DNS works:docker run busybox ping -c 1 172.16.0.1docker run busybox cat /etc/resolv.confdocker run busybox ping -c 1 yourhost.local
# 6. Block all other IPs. This rule has lowest precedence, so you can add allowed IP rules later.firewall-cmd --permanent \ --direct \ --add-rule ipv4 filter DOCKER-USER 10 \ -j REJECT \ -m comment \ --comment 'reject all other traffic to DOCKER-USER'
He cambiado la variable FirewallBackend a iptables nuevamente y funciona para mí.
Con esta actualización, el subsistema de filtrado nftables es el backend de firewall predeterminado para el demonio firewalld. Para cambiar el backend, use la opción FirewallBackend en /etc/firewalld.archivo conf.
No tengo demasiada información sobre este cambio de comportamiento. Algunas de las reglas de iptables que Docker intenta usar no funcionan de acuerdo con los registros de CentOS8:
ADVERTENCIA: COMMAND_FAILED:' /usr/sbin/iptables-w10-D FORWARD-i docker0-o docker0-j DROP ' failed: iptables: regla incorrecta (¿existe una regla coincidente en esa cadena?).