問題の概要
Dockerfile
のビルド中に以下のようなエラーがランダムに発生するケースがあります:
Error getting container <container ID> from driver devicemapper: Error mounting
僕のケースでは、カーネルがLinux 3.13.0-40-generic
、ディストリは Ubuntu 14.04.1 LTS
でした。
Dockerのバグでカーネルのバージョンが原因
この問題はGitHubの下記issueで議論されています。
最近、vbatts氏が以下のようなコメントを投稿していました:
after a good bit of investigation, this appears to be an issue in the 3.13 kernel. There are abundant fixes for device-mapper/dm thin in 3.14 (and fixes/backports to 3.14.y and greater). Too many for me to bisect presently.
The state is that this issue is now only reproducible on ubuntu-14.04.1 LTS, which is locked on linux 3.13.0.
In my testing, even using the builds from http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.14.27-utopic/ allowed me to not hit this issue, but that would likely not be a “supported” resolution for many infrastructures…
I am reluctant to close the issue as fixed, as it is for newer kernels, because so many folks will be on ubuntu 14.04.1 LTS for a while… and will likely still hit this bug.
devicemapperがエラーを起こすのは、linuxのバージョンが3.13.0の場合に限るそうです。
Linuxのバージョンを3.13より上にする
Ubuntu 14.04の場合は、以下のパッケージをインストールします。
sudo apt-get install linux-image-3.16.0-29-generic
次に、システムを再起動してください。
カーネルのバージョンが正しくアップグレードされたことを確認します。
$ uname -a
Linux dev4 3.16.0-29-generic #39-Ubuntu SMP Tue Dec 16 20:54:13 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
これで、件のDockerのエラーは発生しなくなりました。