docker的疑難雜症

蜀道,難發表於2023-10-27

本篇部落格主要是解決docker使用中遇到的常見報錯,為了下次能夠快速解決同樣的問題,專門記錄一下,文章會持續更新。

容器名稱被佔用。

Error response from daemon: Conflict. The container name "/mysql" is already in use by container "abed9581923d9d00777818256d0de8063067d38be353802ed83b3b2244955683". You have to remove (or rename) that container to be able to reuse that name.

這個報錯是你正在嘗試建立一個名為mysql的容器,但已經存在相同容器的名稱,解決辦法是刪除或者重新命名已經存在的容器。下面以刪除容器為例演示。

1.使用下面的命令檢視正在執行和停止的容器。

docker ps -a

image-20231027145316827

2.使用下面的命令來強制刪除容器。

docker rm -f 容器id

3.再次使用docker ps -a發現容器已經刪除。

4.可以再次執行建立容器命令。

防火牆被開啟或關閉

Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b1938128a963 -j RETURN: iptables: No chain/target/match by that name.  (exit status 1))

這個報錯是表明你對linux的防火牆進行開啟或關閉操作,因為自己之前在虛擬機器裡部署應用,為了方便訪問,直接關掉了防火牆,然後在linux中進行有關網路操作的命令時,就遇到了這個報錯。

解決辦法是使用命令

service docker restart

重啟docker.

埠被佔用

docker啟動mysql服務時,遇到了下面的報錯:

docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql5.6.46 (8c10cf68a1196a3a4b62faf37e36a4823bcfe2b353d9881a78c06314c1487fc6): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.

最後顯示3306埠被佔用著。

解決辦法:殺程式,步驟如下。

1.使用命令下面的命令看看linux哪些埠被佔用,找到3306埠。

netstat -tanlp

2.使用命令殺程式。

kill 某個程式(這裡3306埠是被1785佔了)

看下面這張圖就比較好理解。

image-20231027150501233

這樣再重新啟動mysql服務的時候就不會報錯了。

參考部落格:https://blog.csdn.net/qq_41157588/article/details/108889620

容器的詳情中不見閘道器和ip地址

我遇到這個問題時,直接問gpt了,主要就是說這些資訊儲存在容器的網路名稱空間中了。基本沒什麼影響,下面是gpt的回答。

image-20231027151212380

總的來說,遇到問題很正常,不要怕,遇到問題就解決問題,吸取經驗,下次就不會浪費很長時間去解決了。還有就是要具備一定的英文能力,報錯是英文的,讀懂後甚至不用搜尋引擎就能使用docker命令解決問題。

相關文章