docker-compose装了zookeeper和一个服务。
zk服务如下:
szxc-zk:image: "image.sd001.cn:30003/base/zookeeper:3.8"privileged: trueenvironment:- "TZ=Asia/Shanghai"#- "ALLOW_ANONYMOUS_LOGIN=yes"- "ZOO_MY_ID=1"- "ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181"- "ZOO_CONF_DIR=/conf"volumes:- "/szxc/zookeeper/data:/data"- "/szxc/zookeeper:/datalog"- "/szxc/zookeeper/conf:/conf"container_name: szxc-zkports:- "2181:2181"- "2888:2888"- "3888:3888"restart: alwaysnetworks:- szxc_default#network_mode: "host"deploy:resources:limits:memory: "512M"reservations:memory: "20M"
1. 宿主机telnet本机ip 2181可以通
2. 本地无力机telnet宿主机ip 2181 可以通
3. 其他容器,在一个network下,用容器名 2181 不通
4. 其他容器,通过宿主机ip 2181 不通。
提示是no route to host。
traceroute能返回路由,但是有!X提示
各种折腾,后来想,应该是通过宿主机转发策略问题。所以才会有!X提示。
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload
宿主机放通了2181端口,果然可以使用了。
但是仍然无法使用内网network访问。
后来查到放通接口策略
firewall-cmd --zone=trusted --add-interface=br-24ddea6691ec
firewall-cmd --reload //重启防火墙
systemctl restart docker //重启docker,重要:不重启不生效
接口是ip a的网桥的名称
但是实测没有成功。
怀疑是需要删除所有重启重建,时间关系不再测试了。
重点:
容器访问需要宿主机转发,k8s集群一般都关掉了firewalld,但是docker-compose需要开启firewalld和iptables,否则端口路由会创建失败。所以网络数据包也会被防火墙拦截。