一次完整的 Docker 啟動失敗排錯之旅:從 `start-limit` 到 `network not found


一次完整的 Docker 啟動失敗排錯之旅:從 start-limitnetwork not found

你是否也曾自信地敲下 sudo systemctl start docker,卻只得到一個冰冷的 failed?這是一個開發者和運維工程師都可能遇到的場景。本文將通過一個真實的排錯案例,帶你一步步地剖析問題、定位根源、解決故障,最終讓 Docker 服務起死回生。

第一幕:初見端倪 - Active: failed (Result: start-limit)

一切始于一個常規的 Docker 服務啟動命令,但系統卻返回了錯誤。我們立刻檢查服務狀態:

$ systemctl status docker.service
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: failed (Result: start-limit) since Tue 2025-08-05 23:23:57 CST; 41s agoProcess: 12037 ExecStart=/usr/bin/dockerd ... (code=exited, status=1/FAILURE)Main PID: 12037 (code=exited, status=1/FAILURE)Aug 05 23:23:57 my-linux-server systemd[1]: Failed to start Docker Application Container Engine.
Aug 05 23:23:57 my-linux-server systemd[1]: docker.service failed.

診斷分析:
Active: failed 告訴我們服務失敗了,但更關鍵的是 Result: start-limit。這表示 systemd 在短時間內多次嘗試啟動 Docker 守護進程 (dockerd),但每次都以失敗告終。為了保護系統,systemd 決定暫時放棄。

核心教訓 #1systemctl status 只告訴我們“發生了什么”,但要了解“為什么發生”,我們必須深入日志。

第二幕:深挖日志 - ZONE_CONFLICT 防火墻沖突

我們使用 journalctl 來查看 Docker 服務的詳細日志:

$ journalctl -u docker.service --no-pager
...
Aug 05 23:23:55 my-linux-server dockerd[12037]: failed to start daemon: Error initializing network controller: error creating default "bridge" network: Failed to program NAT chain: ZONE_CONFLICT: 'docker0' already bound to a zone
...

診斷分析:
問題清晰了!錯誤是 ZONE_CONFLICT: 'docker0' already bound to a zone
這通常發生在啟用了 firewalld 的系統(如 CentOS/RHEL)上。Docker 嘗試創建和管理 docker0 網橋并配置 NAT 規則,但 firewalld 防火墻發現 docker0 接口已經被分配到了一個防火墻區域(zone),從而阻止了 Docker 的操作,導致沖突。

解決方案:
我們需要明確告訴 firewallddocker0 是一個可信的接口,讓 Docker 自行管理。

# 1. 將 docker0 接口永久添加到 trusted 區域
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0# 2. 重新加載防火墻規則使之生效
sudo firewall-cmd --reload
第三幕:峰回路轉 - 新的錯誤 networks have same bridge name

在解決了防火墻問題后,我們再次嘗試啟動 Docker,但依舊失敗。查看最新的日志,發現錯誤變了:

$ journalctl -u docker.service --no-pager
...
Aug 05 23:33:31 my-linux-server dockerd[3762]: failed to start daemon: Error initializing network controller: ... conflicts with network ...: networks have same bridge name
...

診斷分析:
這個錯誤 networks have same bridge name 意味著 Docker 內部的網絡狀態出現了不一致。很可能是由于之前的反復失敗和異常關閉,導致 Docker 的網絡數據庫文件 (/var/lib/docker/network/files/local-kv.db) 損壞或包含了陳舊的、沖突的數據。

解決方案:
清理 Docker 損壞的網絡狀態文件,讓它在下次啟動時重建一個干凈的狀態。

# 停止 Docker 服務(如果正在嘗試運行)
sudo systemctl stop docker.service# 刪除網絡狀態數據庫文件
sudo rm /var/lib/docker/network/files/local-kv.db

注意:此操作是安全的,僅重置網絡定義,不會影響鏡像和容器數據。

第四幕:撥云見日 - 徹底的清理與重啟

在修復過程中,我們還遇到了配置沖突(-b--bip 互斥)以及一個關鍵的系統警告:

$ sudo systemctl stop docker.service
Warning: Stopping docker.service, but it can still be activated by:docker.socket

診斷分析:
這個警告揭示了 systemd 的“套接字激活”機制。即使我們停止了 docker.servicedocker.socket 依然在監聽。任何 docker 命令的調用都會通過 socket 自動喚醒服務,這可能在我們修復過程中造成干擾。

最終的、完整的解決方案:
我們需要一次徹底的、不受干擾的清理和重啟。

  1. 徹底停止 Docker,包括服務和套接字。

    sudo systemctl stop docker.socket
    sudo systemctl stop docker.service
    
  2. 重置配置文件,排除所有自定義配置的干擾。編輯 /etc/docker/daemon.json,將其內容清空為 {}

    sudo nano /etc/docker/daemon.json
    # 文件內容修改為:
    # {}
    
  3. 清理損壞的網絡狀態(我們在第三幕中已執行)。

    sudo rm /var/lib/docker/network/files/local-kv.db
    
  4. 重置并重啟

    sudo systemctl daemon-reload
    sudo systemctl reset-failed docker.service
    sudo systemctl start docker.service
    

執行完這一系列操作后,systemctl status docker.service 終于顯示了久違的綠色 active (running)

第五幕:最后的勝利 - 解決應用層的 network not found

Docker 守護進程終于正常運行了。但當我們用 docker-compose 啟動應用時,又遇到了最后一個問題:

Error response from daemon: network a_very_long_id not found

診斷分析:
這是一個預期中的“錯誤”。因為我們清除了 Docker 的所有網絡狀態,它“忘記”了之前由 docker-compose 創建的自定義網絡。而我們的應用配置(docker-compose.yml)仍然指向那個已經被遺忘的網絡 ID。

解決方案:
docker-compose 徹底重建整個應用棧,包括它所需的網絡。

  1. 進入你的項目目錄

    cd /path/to/your/project
    
  2. 拆除舊的應用棧,移除所有狀態不一致的容器和網絡定義。

    sudo docker-compose down
    
  3. 重新構建并啟動-d 表示后臺運行,--build 強制重新構建鏡像。

    sudo docker-compose up -d --build
    

docker-compose 會發現網絡不存在,于是自動創建一個新的、干凈的網絡,并啟動新的容器連接到該網絡。至此,所有問題都已解決,應用恢復正常。

總結與啟示

這次排錯之旅告訴我們:

  1. 日志是你的羅盤systemctl status 只是起點,journalctl 才是幫你找到方向的工具。
  2. 理解系統交互:Docker 并非孤立運行,它與 systemdfirewalld 等系統服務緊密交互。ZONE_CONFLICT 就是典型的例子。
  3. 注意隱藏機制docker.socket 的套接字激活機制很容易被忽略,但在關鍵時刻它可能是導致問題反復出現的“幕后黑手”。
  4. 敢于重置狀態:當內部狀態(如網絡數據庫)損壞時,備份后大膽地清理并讓服務重建,往往是最高效的解決方案。
  5. 分清層次:要區分是 Docker 守護進程 的問題,還是 應用層(如 docker-compose)的配置問題。守護進程恢復后,應用層也需要同步更新。

希望這次的經歷能為你在未來的 Docker 排錯道路上提供一份有用的地圖。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94429.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tdengine 時序庫年月日小時分組匯總問題

年月分組select to_char(collection_time ,"yyyy-mm") AS date, cast(SUM(a.stage_value)as DOUBLE) as stage_value from TABLE GROUP BY date年月日分組select to_char(collection_time ,"yyyy-mm-dd") AS date, SUM(a.stage_value)as DOUBLE) as stage_…

數據結構(01)—— 數據結構的基本概念

408前置學習C語言基礎也可以看如下專欄:打怪升級之路——C語言之路_ankleless的博客-CSDN博客 目錄 1. 基本概念 1.1 數據 1.2 數據元素 1.3 數據項 1.4 組合項 1.5 數據對象 1.6 數據類型 2. 數據結構 2.1 邏輯結構 2.2 存儲結構 2.3 數據的運算 在學…

什么是模型并行?

模型并行c 簡單來說,就是把一個模型拆開來放到多個 GPU 上,一起訓練,從而化解“顯存塞不下模型”的問題!更多專業課程內容可以聽取工信部電子標準院《人工智能大模型應用工程師》課程獲得詳解!

跑yolov5的train.py時,ImportError: Failed to initialize: Bad git executable.

遇到的問題&#xff1a; Traceback (most recent call last):File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 296, in <module>refresh()File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 287…

TCP如何實現可靠傳輸?實現細節?

TCP如何實現可靠傳輸&#xff1f;實現細節&#xff1f;如何實現可靠傳輸&#xff1f;擁塞控制的主要機制TCP流量控制怎么實現的&#xff1f;如何實現可靠傳輸&#xff1f; TCP通過自身的序列號、確認應答、數據效驗、超時重傳、流量控制、擁塞避免&#xff0c;確保了數據傳輸的…

Linux 服務器性能監控、分析與優化全指南

Linux 服務器性能監控、分析與優化在現代 IT 架構中&#xff0c;Linux 服務器作為承載業務系統的核心載體&#xff0c;其性能表現直接決定了服務的穩定性、響應速度與用戶體驗。無論是高并發的 Web 服務、數據密集型的數據庫集群&#xff0c;還是承載虛擬化平臺的宿主機&#x…

基于wenet和模型做企業直播敏感語音屏蔽技術

本文介紹了基于Wenet語音識別工具包的實時敏感詞屏蔽技術方案。該方案通過客戶端緩存25秒直播內容&#xff0c;利用Wenet的流式識別和斷句檢測功能&#xff0c;實時檢測講師語音中的敏感詞&#xff0c;并將對應位置的語音替換為"嗶"聲。文章詳細闡述了Wenet的兩種識別…

42.MySQL視圖

1.一個需求emp 表的列信息很多&#xff0c;有些信息是個人重要信息 (比如 sal, comm, mgr, hiredate)&#xff0c;如果我們希望某個用戶只能查詢 emp 表的 (empno、ename, job 和 deptno ) 信息&#xff0c;有什么辦法&#xff1f;表的數據&#xff1a;想讓用戶查詢到的&#x…

MinIO01-入門

零、文章目錄 MinIO01-入門 1、介紹 &#xff08;1&#xff09;介紹 MinIO 是一款基于 Apache License v2.0 的開源對象存儲系統&#xff0c;專為海量非結構化數據&#xff08;如圖片、視頻、日志文件等&#xff09;設計&#xff0c;兼容 Amazon S3 API&#xff0c;支持高性…

*Docker數據卷(Volume)核心機制剖析:持久化與共享的終極解決方案

根本問題當容器被刪除時&#xff0c;其內部產生的所有文件&#xff08;包括配置文件、數據庫、日志&#xff09;都會不可逆丟失。數據卷&#xff08;Volume&#xff09;通過外置存儲方案徹底解決此痛點。一、數據卷與普通容器存儲對比實驗 場景1&#xff1a;無卷模式下的寫入悲…

原型模式在C++中的實現與面向對象設計原則

引言 在軟件開發中&#xff0c;原型模式是一種常用的設計模式&#xff0c;主要用于創建對象的克隆。通過原型模式&#xff0c;我們可以避免復雜的對象創建過程&#xff0c;尤其是當對象的初始化需要大量資源或復雜操作時。本文將通過一個具體的例子&#xff0c;詳細介紹如何在C…

SpringCloud學習------Gateway詳解

在微服務架構中&#xff0c;隨著服務數量的激增&#xff0c;如何統一管理服務入口、實現請求路由、保障服務安全等問題日益突出。SpringCloud Gateway 作為 Spring 官方推出的網關組件&#xff0c;憑借其強大的功Gateway 是 Spring 官方基于 Spring、SpringBoot 和 Project Rea…

計算機網絡:子網掩碼在路由轉發中的關鍵作用

在路由表中,子網掩碼是一個不可或缺的組成部分,其核心作用是精確界定IP地址中“網絡位”和“主機位”的邊界,從而實現路由器對數據包的準確轉發。以下從多個角度詳細解釋其必要性: 1. 區分網絡位與主機位,定位目標網絡 IP地址由“網絡標識”(網絡位)和“主機標識”(主…

14.Home-新鮮好物和人氣推薦實現

新鮮好物實現1.準備模板<script setup>import HomePanel from ./HomePanel.vue</script><template><homePanel></HomePanel><!-- 下面是插槽主體內容模版<ul class"goods-list"><li v-for"item in newList" :ke…

Linux 系統重置用戶密碼指南

Linux 系統重置用戶密碼指南 在 Linux 系統運維中&#xff0c;重置用戶密碼&#xff08;尤其是 root 密碼&#xff09;是一項核心技能。當您忘記密碼時&#xff0c;可以通過進入單用戶模式或恢復模式來修改密碼。此方法適用于大多數 Linux 發行版&#xff0c;如 RHEL/CentOS、D…

[自動化Adapt] GUI交互(窗口/元素) | 系統配置 | 非侵入式定制化

第三章&#xff1a;GUI交互&#xff08;窗口/元素&#xff09; 各位OpenAdapt探索者&#xff0c;歡迎回來~ 在第一章&#xff1a;錄制引擎中&#xff0c;我們揭示了OpenAdapt如何通過"眼睛和耳朵"捕捉所有操作細節。接著在第二章&#xff1a;數據模型中&#xff0c…

Java 模版進階

文章目錄模版通配符模版 通配符 實例 import java.util.ArrayList; import java.util.List;class Message<T> {private T message ;public T getMessage() {return message;}public void setMessage(T message) {this.message message;} } public class test {public …

統計魚兒分布情況 Java

假設有一個池塘&#xff0c;管理員在池塘中添加隨機數量的魚類&#xff0c;為了統計魚類的分布情況&#xff0c;他將池塘劃分為8*8的二維網格&#xff0c;魚兒隨機游動&#xff0c;但是每個網格中最多容納100條魚&#xff0c;要求編寫程序顯示魚兒分布情況&#xff0c;并計算魚…

【HUST】計算機|大學計算機基礎內容(純科普向)+數據結構數組、樹、隊列【舊文搬運】

最初發布時間&#xff1a;2020-09-19 23:17:48 以前寫這篇文章&#xff0c;主要是接觸到一些非計算機學院的同學&#xff0c;為了交流方便我寫下了這篇文章……雖然現在回過頭來看寫得也比較草率&#xff0c;但確實是我對電腦的基礎操作的最早的認識&#xff0c;放到現在我絕對…

CRT調試堆檢測:從原理到實戰的資源泄漏排查指南

在C/C開發中&#xff0c;內存泄漏和資源管理不當是導致程序崩潰、性能下降的常見原因。微軟提供的C運行時庫&#xff08;CRT&#xff09;內置了強大的調試工具&#xff0c;能夠幫助開發者在開發階段及時發現并修復資源泄漏問題。本文將深入解析CRT調試堆的工作原理&#xff0c;…