转载:从docker中的一个容器访问另一个容器出现NO ROUTE TO HOST的解决方案

问题描述

从docker容器内访问主机的服务,在linux下通常直接通过docker0的ip即可访问,docker0的信息可以可通过ip addr show dev docker0获得:

$ ip addr show dev docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:8e:71:65:fc brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:8eff:fe71:65fc/64 scope link
       valid_lft forever preferred_lft forever

在centos下,如果没设置,docker0的默认ip应该是 172.17.0.1,我们通过这个ip就可以访问到docker所在的主机。

这里有个已知的bug,如果主机的端口(服务)是从另外一个docker(如docker B)映射出来的,则通过docker A进行访问会提示NO ROUTE TO HOST,这里有个帖子说明这个问题: This is a "know" bug

This is a “known” bug. Everyone can access in this port, except for container in the same host. You have to allow it with firewall (yes this is a firewall/docker issue).

解决的办法如下

新增一条防火墙规则来允许docker A访问主机,具体如下:

1、通过命令行添加

firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.18.0.0/16 accept' && firewall-cmd --reload
注意将 172.18.0.0/16改成docker A的ip,查看docker A的ip可以执行  docker inspect YouDockerName | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.18.0.2"

2、centos7下如果采用firewalld的,可以通过新增防火墙规则到/etc/firewalld/zones/public.xml中:

<rule family="ipv4">
    <source address="172.18.0.0/16"/>
    <accept/>
</rule>

3、如果是iptables,则采用如下命令:

sudo iptables -A INPUT -s 172.18.0.0/16 -j ACCEPT
# 保存规则,否则重启后会失效
sudo service iptables save

4、重启docker服务

systemctl restart docker

原文链接:从docker中的一个容器访问另一个容器出现NO ROUTE TO HOST的解决方案 - linux (ezool.net)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值