最新

cheep, cheep, cheep...


2021-02-18

_ Ubuntu で nvidia docker が動かないトラブル

TLDR

docker-ce をインストールするなら, snap の docker パッケージも purge すること

本文

docker-ce と, nvidia-container-toolkit (あるいは nvidia-docker2) をインストールしているのに,以下のようなエラー (docker コンテナ内から GPU が見えない) が出る.

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

しかもこのエラー,出たり消えたりするのだ.試行錯誤してエラーが消えたと喜んだら,1ヶ月後に突然に再発する.再発までの間に, apt のパッケージ更新や,設定の変更は一切行なっていないのに.

この問題で2ヶ月ほど苦しんだのだけど,ようやく原因が判明した. apt でインストールした docker-ce とは別に, snap パッケージの docker がインストールされており,競合していたのだ. snap 側の dockerd が起動してしまうと,バージョンが古く, container-toolkit も入っていないので, GPU が見えないという仕組みだった.ややこしいのは, GPU が見えない事以外は正常に動作してしまうので,競合していることに気付けなかった.

以下のコマンドで snap パッケージを削除することで,競合が起こらないようにできた.

% snap remove --purge docker 

(--purge フラグが必要. purge フラグがないと,イメージやコンテナを保存しようと圧縮するので長い時間がかかる上に, remove 後もストレージを消費し続けてしまう)

さて, snap で docker をインストールした記憶はないので,原因を調べてみた.Ubuntu 20.04 のインストーラを実行していた時間に, cloud-init が snap で docker をインストールしている記録が見つかった.どうやら,私が Ubuntu インストーラの選択肢を間違えて,不要な snap package をインストールしてしまったらしい.

2020-12-** **:**:**,*** - util.py[DEBUG]: Running command snap install --channel=stable docker with allowed return codes [0] (shell=True, capture=True)