Docker解决容器内访问宿主机'No route to host'的问题
问题
使用docker
在虚拟机上搭建了prometheus
服务器,并采集etcd
、jaeger
等服务的监控指标,有一天prometheus
的targets中State显示异常,发现是不能访问宿主机IP导致。另外一个容器访问别外一个容器的数据库(也是通过主机IP)也不成功,应该是同一问题。
解决
主要原因在服务器屏蔽从docker内部的访问, 修改服务器的防火墙设置即可.
ifconfig
查看docker0的IP,一般为172.17.0.1
在服务器内修改配置文件vi /etc/firewalld/zones/public.xml
添加容器A的ip地址, 具体内容如下:
1 <rule family="ipv4">
2 <source address="172.17.0.0/16"/>
3 <accept/>
4 </rule>
也可用命令添加:
1firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.17.0.0/16 accept'
如果以上操作问题还是不能解决,可尝试开启防火墙端口:
1firewall-cmd --zone=public --add-port=3306/tcp --permanent # mysql
2firewall-cmd --zone=public --add-port=2379/tcp --permanent # etcd
3firewall-cmd --zone=public --add-port=14269/tcp --permanent # jaeger
4firewall-cmd --reload
这些命令主要是修改vi /etc/firewalld/zones/public.xml
文件,操作后的内容如下:
1<?xml version="1.0" encoding="utf-8"?>
2<zone>
3 <short>Public</short>
4 <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
5 <service name="ssh"/>
6 <service name="dhcpv6-client"/>
7 <port protocol="tcp" port="20"/>
8 <port protocol="tcp" port="21"/>
9 <port protocol="tcp" port="22"/>
10 <port protocol="tcp" port="80"/>
11 <port protocol="tcp" port="443"/>
12 <port protocol="tcp" port="3306"/>
13 <port protocol="tcp" port="2379"/>
14 <port protocol="tcp" port="14269"/>
15 <rule family="ipv4">
16 <source address="172.17.0.0/16"/>
17 <accept/>
18 </rule>
19</zone>
如果还存在问题的话,重启docker
1systemctl restart docker.service
发布日期:2023-07-31 19:40 字数:136 用时
tags:Docker
标签云
alpine(1) api网关(1) async(1) await(1) centos(4) cli(1) client-go(1) debug(1) docker(10) docker-compose(1) dockerfile(1) embed(1) es6(1) etcd(1) etcdctl(1) freemesh(2) git(6) go(5) go-zeus(5) goland(2) golang(7) grafana(2) grpc(5) grpcurl(1) homebrew(1) homedir(1) http(2) hugo(1) java(2) javascript(3) job(1) js(1) json(1) k8s(16) k8s部署指南(1) kubebuilder(1) kubectl(4) kubernetes(1) linux(2) localecompare(1) lombok(1) metrics(2) mock(1) mysql(1) npm(1) nsenter(1) nvm(1) pnpm(2) pprof(1) prettier(1) prometheus(2) protobuf3(1) protoc(1) qiankun(1) request(1) scss(1) servicemesh(1) spring(1) springcloud->freemesh(1) ssh(2) systemctl(1) tcpdump(1) typescript(2) vite(2) vscode(2) vue(8) vue-admin(2) vue3(1) webssh(1) xtermjs(1) xxl-job(1) yarn(1) zookeeper(1) 云原生(4) 云原生框架(1) 介绍(1) 单体架构->freemesh(1) 单元化(1) 博客(1) 压缩(1) 可观测(1) 后台管理系统(1) 命名规范(1) 多云多活(1) 如水网(1) 安全(1) 安装(1) 容器(2) 开发联调神器(1) 微前端(1) 微服务(2) 微服务架构->freemesh(1) 微服务框架(1) 快速开始(1) 控制面(1) 数据面(1) 文集(2) 服务发现(1) 服务网格(1) 流量泳道(1) 流量管理(1) 监控告警(1) 端口映射(1) 证书(1) 负载均衡(1) 配置(1)