Docker: connection reset by peer


想來,對docker的學習和實踐,已經一年有余了,而我關於這樣的文章,只有為數不多的幾篇。今天借使用docker中發生的一種異常情況為例,寫此篇幅。

這個是在centos7.0 、.netcore2.1的環境基礎上進行的。這里沒有使用dockerfile配置文件的形式,而是直接采用docker命令的形式。

鏡像采用的是docker.io/microsoft/dotnet 。

然后運行鏡像

docker run -d  --privileged=true  -v /app:/app -p 5000:5000  bde01d9ed6eb dotnet /app/WebApplication1.dll

這樣,運行其鏡像,理論上是可以的,但是curl訪問的時候,就出現了標題所示的問題。

首先通過docker exec命令,在運行的容器中,執行curl請求,訪問http://localhost:5000端口,返回結果正常,在當前主機上訪問,就會出現connection reset by peer的問題,查看主機正在監聽的端口

[root@localhost ~]# netstat -ant|grep 5000
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:5000                :::*                    LISTEN

可以看到,正在監聽,telnet撥號也是連通的狀態,

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c9a97ffc6cc2        bde01d9ed6eb        "dotnet /app/WebAp..."   3 hours ago         Up 3 hours                              xenodochial_jang

容器正在運行,為此,又在docker run執行容器的時候,加上 expose參數,暴露端口,expose=5000,指定了容器暴露的端口,這下應該沒問題了吧,可結果依然如題!

想必是網絡問題,諸如防火牆、端口映射之類的問題,也想過修改防火牆設置,由於嫌操作麻煩,就未做嘗試。

百度,必應一下:結果令人失望,又是鏡像問題,又是防火牆問題,都無法解決該問題。

思前想后,不要把問題復雜化了,切換網絡吧,docker run的--net命令

docker run -d --net="host"  --privileged=true -v /app:/app -p 5000:5000 bde01d9ed6eb dotnet /app/WebApplication1.dll

這樣容器啟動后,訪問測試:

curl http://localhost:5000

  

當然,這個過程中,還出現了類似權限之類的問題,導致應用無法啟動,在此篇中,不再贅述。

具體問題還是具體分析,同一個錯誤,可能觸發問題的原因不盡相同,這就需要我們辯證的去思考,根據自身應用的情況,進行嘗試。經過這一段時間的學習,多余docker的理論和實踐等方面,有了不少的心得,對應docker的大部分命令都可以爛熟於心的,靈活的應用,在以后的工作中,會在團隊內部,推動容器技術的應用。

 


免責聲明!

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



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