がべーじこれくしょん

技術系とかいろいろ

Cannot connect to the Docker daemon. の対処法

執筆・創作活動への支援をぜひお願いします🙏
Buy Me A Coffee

とある日、Docker上で走らせていたナレッジベースシステムが落ちていた。

「どうせだれか間違ってdockerのプロセスkillしたんだろwww」とか思ってdocker psしてみたところ以下のエラーが。

$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

どうやっても治らなかったので再インストールします。

再インストール手順

下準備

公式ドキュメントにアンインストールの方法も書いてあったのでこちらを参考にします。

docs.docker.com

どうやらdockerとかdocker-engineとか呼んでた時代はとうの昔のようで、古いパッケージを捨ててアップデートしてくれと書いてありました。(もしかしてコレが原因…?)

$ sudo apt-get remove docker docker-engine

ちなみに、dockerやdocker-engineを削除しても、作成したコンテナやイメージは消えないのでご心配なく。 (各ファイルは/var/lib/docker/に入ってるので、もし仮に全データを吹き飛ばしたいのであればこちらのディレクトリをrmしてください。)

特段の理由がない限りはlinux-image-extra-*ってパッケージ入れてね。これないとdockerがaufsっていうストレージドライバを使えないからさ。

って公式が言ってるので入れます。

$ sudo apt-get update

$ sudo apt-get install \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual

さて、サクサク再インストールしていきましょう。

まずはaptコマンドがHTTPS経由でやり取りできるようにするパッケージを入れます。

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

次に、dockerの公式GPGキーを登録します。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

念のため、キーのfingerprintが以下のものであるか確認してください。(公式サイトで確認することをおすすめします。)

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

$ sudo apt-key fingerprint 0EBFCD88

次に、dockerのリポジトリaptに追加します。

基本はamd64だと思いますが、Raspbian等を使っている方はarmhfの方を実行してください。

amd64:

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

armhf:

$ sudo add-apt-repository \
   "deb [arch=armhf] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

dockerのインストール

さて、ここからは安定版のdockerをインストールしていきます。

まず、パッケージのindexを更新しましょう。

$ sudo apt-get update

次に、dockerをインストールします。今回は、Community Editionをインストールするので、実際はdocker-ceというパッケージをインストールすることになります。

$ sudo apt-get install docker-ce

インストールが完了したら、以下のコマンドを実行してhello-worldイメージが正常に起動するか確認してください。

$ sudo docker run hello-world

これにて完了です。

dockerの更新手順

sudo apt-get updateを実行後、上記インストール手順を頭から繰り返せばいいらしいです。

詳しくは公式ドキュメントをご参照ください

docs.docker.com