docker.サービスの起動に失敗しました:Unit not found

3424 ワード

最近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として実行するかは不明である.サービスコマンド時にhangが止まりましたが、ここにも併せて記録されています.

問題の説明


Docker 1.10.3から1.13.1にアップグレードし、rpmパッケージでインストールしました.カスタマイズされたDocker構成の一部を保持するため、アップグレード後、元の/usr/lib/systemd/system/dockerを使用します.サービスは新しいdockerを上書きしました.service.しかし1.10.3バージョンではdocker.サービスの[UNIT]にはRequires=dockerと規定されています.つまりdocker.サービスのデフォルトはdocker.に依存します.dockerを使う必要があるからsocketはコンテナの情報を取得します.
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

しかし1.13.1バージョンではdocker.に依存しなくなった.ソケットだからシステムにはdockerがないソケット、私は元のdockerを使い続けました.サービスは、起動時にエラーが発生します.

解決策


削除/usr/lib/systemd/system/docker.サービスの[UNIT]に含まれるdocker.socket、そしてsystemctl daemon-reload、最後にsystemctl start docker.サービス、起動に成功したことに気づきました.

類似の状況


似たような場合はdockerが欠けています.ソケットですが、新しいバージョンにはdockerが必要です.socket.この問題を解決するには、次の2つの方法があります.
  • dockerをアンインストールし、再インストールするとdockerが表示されます.socket.
  • /usr/lib/systemd/system/dockerを作成socketファイル、systemctl daemon-reload、最後にsystemctl start docker.サービスは、正常に起動します.

  • /usr/lib/systemd/system/docker.ソケットファイルは次のとおりです.
    [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が現れたのです.サービス:Unit not foundの問題.

    問題の説明


    dockerのせいじゃないと確信してるsocketの問題が原因で、私の最初の反応はflannelを削除したことです.flanneldを知っているからです.サービスとdocker.サービスは、起動順序に直接関連しています.
    [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です.サービスは削除しました.システムctl daemon-reloadも削除しました.いったいどのファイルが削除されましたか.
    検査の結果、/etc/systemd/system/flanneld.サービスは依然として存在し、/etc/systemd/system/dockerが存在する.service.requiresディレクトリは、ソフト接続flanneldを含む.サービス、このソフトリンクは本当のflanneldを指しています.サービスは、2つのサービスの起動順序の関連付けを実現します.
    このような問題を特定するには、よく使用されるコマンドは次のとおりです.
  • systemctl list-unit-files使用可能なすべてのUnit
  • がリストされます.
  • systemctl list-unitsは、実行中のすべてのUnit
  • をリストします.
  • systemctl--failedはすべての失敗ユニット
  • をリストします.
  • systemctl mask httpd.サービス無効化サービス
  • systemctl unmask httpd.service
  • systemctl kill httpd殺人サービス
  • systemd-analyze critical-chain:分析起動時のキーチェーン
  • systemd-analyze blame分析起動時に各プロセスにかかる時間
  • 解決策


    systemctl unmask flanneldを使用します.サービスはflanneldサービスを禁止し、/etc/systemd/system/dockerを削除します.service.requires/flanneld.Services、systemctl daemon-reloadを使用してサービスプロファイルを再ロードし、最後にsystemctl start docker.サービス、dockerの起動に成功したことを発見しました.
    転載先:https://www.cnblogs.com/ggsmida/p/6738539.html