在docker中只要有容器映射了端口docker就会自动加iptables
iptables -L -n
Chain DOCKER (8 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.18.0.2 tcp dpt:2379
ACCEPT tcp -- 0.0.0.0/0 172.18.0.5 tcp dpt:8888
ACCEPT udp -- 0.0.0.0/0 172.18.0.5 udp dpt:8888
ACCEPT tcp -- 0.0.0.0/0 172.18.0.11 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 172.18.0.12 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 172.18.0.17 tcp dpt:8070
ACCEPT tcp -- 0.0.0.0/0 172.17.0.2 tcp dpt:9000
而我的防火墙规则
firewall-cmd --list-ports
8888/tcp 8888/udp 8000/tcp 13070/tcp 60000/tcp 80/tcp 22/tcp
防火墙中并没有允许9000访问,但是在外网是可以访问,这个问题已存在很久,在社区中大家都对docker接管iptables意见很大
解决方案很多
简单暴力法不让docker使用iptables
直接iptables移除并修改
修改绑定为127.0.0.1
我是使用最后一个方案,其他都太麻烦
apollo-portal:
container_name: apollo-portal
build: apollo-portal/
image: apollo-portal
ports:
- "127.0.0.1:13070:8070"
depends_on:
- apollo-adminservice
- apollo-mysql
volumes:
- "/opt/apollo/logs/100003173:/opt/logs/100003173"
environment:
- spring_datasource_url=jdbc:mysql://apollo-mysql:3306/ApolloPortalDB?characterEncoding=utf8
- spring_datasource_username=root
- spring_datasource_password=root
- DEV_META=http://apollo-configservice:8080
networks:
- apollo_cover