Docker不同主机间的容器通信及常见故障处理
在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动启用,Docker macvlan 只支持 bridge 模式
macvlan 需要一块独立的网卡来进行使用,所以我们需要新添加一块网卡
1 | docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=ens224 mtacvlan-1 |
-o parent=网卡名称 指定用来给 macvlan 网络使用的物理网卡
注意,要在所有需要运行 macvlan 的主机上执行这条命令,但是要记得更改网关的地址,避免造成IP冲突
1 | docker run -itd --network macvlan-1 centos /bin/bash |
在 Docker 中,overlay 是众多 Docker 网络模型中的一种,并且是一种跨主机的全局网络模型,有一个数据库专门的来存储网络分配信息,避免 IP 冲突,同时内部还有一个小型的 DNS 我们可以直接通过主机名进行访问
consul 服务端:
1 | docker run -itd -h consul --name consul --restart=always -p 8500:8500 progrium/consul -server -bootstrap |
-h 主机名
–name 容器名
–restart=always 重启策略
progrium/consul 镜像名称
-server 以服务节点启动
-bootstrap 预期的启动节点数:自举
在浏览器内输入 IP地址+端口号 可以看到 web 页面
在所有主机上编辑 daemon.json 文件:
{
“hosts”: [“tcp://0.0.0.0:2375”,”unix:///var/run/docker.sock”], 监听相关端口
“cluster-store”:”consul://192.168.1.150:8500”, 集群的主机地址
“cluster-advertise”:”192.168.1.150:2375” 宣告自己的地址
}
重启 docker 服务
创建 overlay 网络(全局网络):一台主机上创建自动同步
1 | docker network create -d overlay overlay-1 |
启动容器测试:
1 | docker run -it --name docker-1 --network=overlay-1 centos /bin/bash |
验证:
1 | ping docker-1 |
如发现各容器内分配的ip之间相互ping不通
原因:可能由于防火墙问题引起的,默认forward链是drop状态,需要打开才可以
解决方案:
执行下面操作,保证INPUT FORWARD链都是ACCEPT状态
清除其他规则
1 | iptables -P INPUT ACCEPT |