Firewalld可以使用Docker覆盖networking吗?

首先,我使用以下设置创build2个docker主机:

## CLUSTER CONFIGURATION # Firewall: firewalld # OS: CentOS7 # IPs: - 10.10.2.3 - 10.10.2.4 # Docker daemons: /usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 \ --cluster-store=consul://10.10.2.3:8500 \ --cluster-advertise=10.10.2.3:2375 /usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 \ --cluster-store=consul://10.10.2.3:8500 \ --cluster-advertise=10.10.2.4:2375 

然后,我创build一个覆盖networking:

 docker network create -d overlay my-overlay-network 

然后,我尝试使用容器的主机名从Node1上的容器ping Node2上的容器:

 # ssh 10.10.2.4 docker run --net my-overlay-network --hostname 10-10-2-4-container centos /bin/sh -c 'while true; do sleep 1; done' # Start firewalld, and open ports on both machines systemctl start firewalld /usr/bin/firewall-cmd \ # Add Consul ports --add-port=8300/tcp \ --add-port=8301/tcp \ --add-port=8301/udp \ --add-port=8302/tcp \ --add-port=8302/udp \ --add-port=8400/tcp \ --add-port=8500/tcp \ --add-port=8600/tcp \ --add-port=8600/udp # Add Docker ports --add-port=2375/tcp \ --add-port=7946/tcp \ --add-port=7946/udp \ --add-port=4789/tcp # From Node1. This fails! The hostname resolves correctly # to the right subnet and IP, but the ping packet doesn't return. docker run --net my-overlay-network centos ping -c node2-container # After disabling the firewall, it works fine. systemctl stop firewalld # From 10.10.2.3 systemctl stop firewalld # From 10.10.2.4 docker run --net my-overlay-network centos ping -c 10-10-2-4-container 

基本上,当防火墙打开时,看起来我不能ping我的节点。 主机名显示正确parsing。 我如何configuration防火墙与Docker覆盖networking配合使用?

是的,它可以!

这些是您需要为覆盖networking打开的端口,以使用多主机Docker设置:

 firewall-cmd \ --add-port=2375/tcp \ --add-port=4789/udp \ --add-port=7946/tcp \ --add-port=7946/udp 

4789端口用于VXLAN。 它通过UDP运行。 您还需要打开您的KV系统使用的任何端口,特别是DNSparsing端口(Consul以8600 UDP / TCP侦听DNSparsing)。