主機訪問docker映射的端口報錯curl(56)解決


背景

用docke部署了一個服務,在本地一樣的環境測試沒問題,但是在正式服會報curl(56):connection reset by peer錯誤,網上搜了一堆答案,諸如端口映射、防火牆配置、代理類的答案都沒解決。
詳細可以參照https://www.shuzhiduo.com/A/ZOJPm4LE5v/,這里只是用於個人記錄

解決

  • 1.首先確認容器起來后,exec進入容器里驗證服務是正常啟動了的,例如可以在容器里用curl驗證,另外還需確定端口是開放到0.0.0.0(而不是127.0.0.1)
  • 2.確定服務是正常啟動了,一般就是因為端口映射的問題,導致在宿主機上訪問不了
  • 3.嘗試修改端口映射、expose端口無果
  • 4.直接--net=host,讓容器與宿主機共享網卡即網絡配置,不進行端口映射即可
    附:docker的四種網絡模式https://www.cnblogs.com/gispathfinder/p/5871043.html

后續--建議的解決方案

因為需要開多個相同鏡像容器的需求,需要使用多個不同的端口,所以上述解決方法不滿足該需求,不可以避免得改了端口就會導致curl(56)錯誤,最終經過排查,發現根本原因是所使用的正式服服務器的iptables默認是drop掉所有包的
解決:

  • 方法1:增加放通宿主機到docker的規則,iptables -I OUTPUT -o docker0 -j ACCEPT
  • 方法2:增加放通宿主機到容器的具體IP,iptables -A OUTPUT -d 172.17.0.0/24 -j ACCEPT(建議使用該方法,因為容器啟動時的網卡模式是不一定的,虛擬網卡不一定對應是docker0)
  • 注:具體的容器ip可以通過docker inspect <container ID> | grep IP查看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM