1. 程式人生 > >Docker啟動容器報錯: connect: no route to host

Docker啟動容器報錯: connect: no route to host

前言

筆者在重啟了Docker服務後,發現其中一個api容器起不來了,這個容器在內部連結了另外一個MySQL容器,而那個MySQL容器是已經正常運行了。筆者通過docker logs container檢視api容器啟動日誌,發現了這個錯誤:

[ORM]2018/10/31 09:05:36 register db Ping `default`, dial tcp 192.168.1.54:3306: connect: no route to host
2018/10/31 09:05:36.636 [E] [command.go:54] 註冊預設資料庫失敗: register db Ping `default`, dial tcp 192.168.1.54:3306: connect: no route to host

解決方案

通過在防火牆配置檔案的增加一條規則,此問題得以解決,規則如下:

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

其中address部分改為自己機器docker0網絡卡的ip地址,然後將規則加入防火牆配置:

[[email protected] /root]#cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected inco
ming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <rule family="ipv4">
       <source address="172.17.0.1/16"/>
       <accept/>
  </rule>
</zone>

然後重啟防火牆:

[[email protected] /root]#systemctl restart firewalld.service

然後該容器就可以正常啟動了,問題解決。

注意,如果防火牆會影響api服務的訪問,做完這些操作時請記得停止防火牆服務;筆者在這裡就給自己挖了一個坑,導致後臺無法訪問api,把防火牆停掉即可。