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)