docker.サービスの起動に失敗しました:Unit not found
3424 ワード
最近Kubernetesクラスタバージョンのアップグレード、Dockerバージョンのアップグレードを振り回しているので、テスト環境のインストール、復元、アップグレード、ダウングレードを続けているので、めちゃくちゃではありません.ついに、Dockerバージョンのアップグレードをテストした後、Dockerを起動するとdockerに遭遇しました.service: Unit not found.問題は大きくないが、私を何時間も苦しめたので、ここでmarkします.
オペレーティングシステム:Red Hat Enterprise Linux 7
最初に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はコンテナの情報を取得します.
しかし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.ソケットファイルは次のとおりです.
背景に描かれているように、私はちょうどこの問題のある機械にKubernetesとflannelをインストールし、私が以前思っていた「すべて」に関するファイルを削除しました.flannelのファイルがきれいに削除されなかったからこそdockerが現れたのです.サービス:Unit not foundの問題.
dockerのせいじゃないと確信してるsocketの問題が原因で、私の最初の反応はflannelを削除したことです.flanneldを知っているからです.サービスとdocker.サービスは、起動順序に直接関連しています.
本当に困ったのは/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
オペレーティングシステム: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つの方法があります.
/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 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