一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - docker.service啟動失敗:Unit not found的原因及解決辦法

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

2021-01-21 17:48Docker教程網 服務器知識

這篇文章主要介紹了docker.service啟動失敗:Unit not found的原因分析及解決辦法,需要的朋友可以參考下

背景

因為最近一直在折騰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來獲取容器的信息。

?
1
2
3
4
5
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=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文件如下:

?
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target

原因2:flanneld.service

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

問題描述

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

?
1
2
3
4
5
6
7
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=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的原因分析及解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品一区二区三区在线播放 | 国产成人盗摄精品 | 日本亚欧乱色视频在线观看 | 小莹的性荡生活45章 | 美女自插| 91庥豆果冻天美精东蜜桃传媒 | 娇妻被又大又粗又长又硬好爽 | 3d动漫免费 | 男人女人插 | 日本人成动漫网站在线观看 | 热99精品 | 国产精品每日在线观看男人的天堂 | 香蕉久久夜色精品国产小优 | 国产色综合久久五月色婷婷中文 | 小辣椒精品福利视频导航 | 亚洲色图第四页 | 亚洲国产成人综合 | 免费一级毛片在线播放 | 4hu影院在线观看 | 亚洲29p| 出a级黑粗大硬长爽猛视频 吃胸膜奶视频456 | 国产日产国无高清码2020 | 学校女性奴sm训练调教 | 精品亚洲一区二区三区在线播放 | 午夜久久免影院欧洲 | 欧美一区二区三区精品国产 | www.日日日| 亚洲国产天堂久久综合网站 | 天美蜜桃精东乌鸦传媒 | 天堂成人在线观看 | 亚洲久草视频 | 国产一级一级一级成人毛片 | 999久久免费高清热精品 | 国产成人h视频在线播放网站 | 亚洲精品视频观看 | 久久精品99国产精品日本 | 国产精品边做边接电话在线观看 | 四虎精品影视 | 欧美日韩国产成人综合在线 | 日韩一级在线观看 | 草逼视频网址 |