docker-compose装了zookeeper和一个服务。
zk服务如下:
szxc-zk:
image: "image.sd001.cn:30003/base/zookeeper:3.8"
privileged: true
environment:
- "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-zk
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
restart: always
networks:
- 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,否则端口路由会创建失败。所以网络数据包也会被防火墙拦截。