国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

docker.service啟動失敗:Unit not found的原因及解決辦法

2024-09-01 13:51:30
字體:
來源:轉載
供稿:網友

背景

因為最近一直在折騰Kubernetes集群版本升級、Docker版本升級,所以不停的把測試環境安裝、還原、升級、降級,簡直亂的不行。終于,在測試Docker版本升級后,啟動Docker時,遇到了docker.service: Unit not found。問題雖然不大,但是卻折磨了我幾個小時,所以在此mark一下。

操作系統:Red Hat Enterprise Linux 7

原因1:docker.socket

最初在啟動docker時遇到問題,是因為docker.socket引起的,雖然記不清問題是表現為Unit not found還是執行systemctl start docker.service命令時hang住了,但是也一并記錄在這里。

問題描述

我是從Docker 1.10.3升級到1.13.1版本,通過rpm包安裝的。由于要保留自定義的一些Docker配置,所以在升級后,使用原來的/usr/lib/systemd/system/docker.service覆蓋了新的docker.service。但是在1.10.3版本中,docker.service的[UNIT]里規定了Requires=docker.socket,也就是說,docker.service默認依賴于docker.socket,因為需要使用docker.socket來獲取容器的信息。

[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network.target docker.socketRequires=docker.socket

但是在1.13.1版本中,已經不再依賴于docker.socket了,所以系統里沒有docker.socket,而我繼續使用原來的docker.service,所以在啟動的時候,就會出錯。

解決辦法

刪除/usr/lib/systemd/system/docker.service的[UNIT]里包含的docker.socket,然后systemctl daemon-reload,最后systemctl start docker.service,發現啟動成功了。

類似情況

如果是類似的情況,缺少docker.socket,但是新版本需要docker.socket。有兩種方法可以解決該問題:

  • 可以卸載docker,再重新安裝,即可出現docker.socket。或者
  • 創建一個/usr/lib/systemd/system/docker.socket文件,然后systemctl daemon-reload,最后systemctl start docker.service,即可啟動成功。

/usr/lib/systemd/system/docker.socket文件如下:

[Unit]Description=Docker Socket for the APIPartOf=docker.service[Socket]ListenStream=/var/run/docker.sockSocketMode=0660SocketUser=rootSocketGroup=docker[Install]WantedBy=sockets.target

原因2:flanneld.service

就如背景里描述的,我恰好在這臺出問題的機器上,安裝過Kubernetes,以及flannel,然后又刪掉了我之前以為的“所有”相關的文件。正是由于flannel的文件沒有刪除干凈,導致出現了docker.service: Unit not found的問題。

問題描述

在確定不是因為docker.socket的問題導致的之后,我第一反應就是刪除flannel導致的,因為我了解flanneld.service與docker.service直接是有啟動順序的關聯的:

[Unit]Description=Flanneld overlay address etcd agentAfter=network.targetAfter=network-online.targetWants=network-online.targetAfter=etcd.serviceBefore=docker.service

真正困擾了我很久的是,/usr/lib/systemd/system/flanneld.service我已經刪除了,也systemctl daemon-reload了,究竟還有哪個文件漏刪了。

經過檢查,/etc/systemd/system/flanneld.service依然存在,并且存在/etc/systemd/system/docker.service.requires目錄,在該目錄下包含了軟連接flanneld.service,該軟鏈接指向了真正的flanneld.service,從而實現了兩個服務的啟動順序的關聯。

定位該類問題,經常會用到的命令有:

  • systemctl list-unit-files 列出所有可用的Unit
  • systemctl list-units 列出所有正在運行的Unit
  • systemctl --failed 列出所有失敗單元
  • systemctl mask httpd.service 禁用服務
  • systemctl unmask httpd.service
  • systemctl kill httpd 殺死服務
  • systemd-analyze critical-chain:分析啟動時的關鍵鏈
  • systemd-analyze blame 分析啟動時各個進程花費的時間

解決辦法

使用systemctl unmask flanneld.service禁止flanneld服務,然后刪除
/etc/systemd/system/docker.service.requires/flanneld.service,使用systemctl daemon-reload重新加載服務配置文件,最后systemctl start docker.service,發現docker啟動成功了。

以上所述是小編給大家介紹的docker.service啟動失敗:Unit not found的原因分析及解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康定县| 简阳市| 克山县| 河津市| 固始县| 千阳县| 浦江县| 江永县| 乐山市| 和龙市| 罗源县| 汝城县| 沭阳县| 保亭| 新丰县| 杨浦区| 上思县| 许昌市| 隆回县| 长汀县| 紫金县| 金沙县| 措美县| 古蔺县| 涟源市| 海淀区| 通州区| 新郑市| 五寨县| 株洲县| 阳泉市| 即墨市| 金塔县| 固始县| 石渠县| 柳河县| 五大连池市| 吴川市| 襄樊市| 绵阳市| 房产|