LoginSignup
0
0

More than 5 years have passed since last update.

overlay2でレイヤ数が多くてdocker checkpointに失敗するとき

Last updated at Posted at 2016-12-02

Docker 1.13.0ではexperimentalにdocker checkpointが使えます。この機能を使うにはバージョン2.0以上のcriuコマンドが必要ですがCentOS 7 1511のcriuのバージョンは1.6.1なのでこの条件を満たしていません。CentOS 7 1611はまだリリースされていないため http://buildlogs.centos.org/c7.1611.00/criu/20161105151332/2.3-2.el7.x86_64/ にあるcriuのRPMパッケージとこれが要求するRPMパッケージを拝借しました。

まず https://criu.org/Docker にあるlooperと名付けられたコンテナでcheckpointを試したところ問題なく checkpoint/start できました。次に jupyter/minimal-notebook コンテナの checkpoint を試したところエラーが発生しました。

$ docker run -d -v $HOME/work:/home/jovyan/work --name jupyter-criutest --security-opt seccomp:unconfined jupyter/minimal-notebook:bde52ed89463
8db2c747f69f6f31243d096d646b3c5dd22b7bc116d1ec73d464ca81d286d928
$ docker checkpoint create jupyter-criutest chkp1
Error response from daemon: Cannot checkpoint container jupyter-criutest: rpc error: code = 2 desc = exit status 1: "criu failed: type NOTIFY errno 0\nlog file: /var/lib/docker/containers/8db2c747f69f6f31243d096d646b3c5dd22b7bc116d1ec73d464ca81d286d928/checkpoints/chkp1/criu.work/dump.log\n"

dump.logファイルを見るとmountinfoを参照するところでエラーになっていました。

chkp1/criu.work/dump.logから抜粋
(00.012763)     type overlay source overlay mnt_id 278 s_dev 0x29 / @ ./ flags 0x200000 options lowerdir=/var/lib/docker/overlay2/l/EKV3W63OS43XTCXPOVRGVU7NEA:/var/lib/docker/overlay2/l/6J76737SN2PMJWNA4KK6IC4OBJ:/var/lib/docker/overlay2/l/YKWYVPDZGFJPCL4Q7PGYMTDFII:/var/lib/docker/overlay2/l/MHT7U7U6FNOPWZ3MBUQEFWRZKP:/var/lib/docker/overlay2/l/T7YMXVTUCFH6S5VLFODGDFWWC7:/var/lib/docker/overlay2/l/JX7546TYZ4CXFYUDZMFYGGZOGE:/var/lib/docker/overlay2/l/BCHSQIXMQYGGDB4AQLQMSCKH4P:/var/lib/docker/overlay2/l/QFK55IECTCMMTDLXJIYJAUACO3:/var/lib/docker/overlay2/l/HHBIIN2OZQP2AMSPLVDJQHDZHR:/var/lib/docker/overlay2/l/YQNRVHJI3Q6SB7XBLDSERKY7GX:/var/lib/docker/overlay2/l/RF2PBUHK5VGKMKGMM4YP3POSSR:/var/lib/docker/overlay2/l/W5SBLXWFONOXEQFZC3TK3BRAD6:/var/lib/docker/overlay2/l/G4G57JS7LLSLPWTLQ2DSAVEOVO:/var/lib/docker/overlay2/l/HO63J5GVQWB2FMXTDKSRCPPYLS:/var/lib/docker/overlay2/l/DL3ISEN6SV6VUUTFSRJBF6VXAA:/var/lib/docker/overlay2/l/64UU3KXQU3JWSMM5I2N5VANYUI:/var/lib/docker/overlay2/l/A7BYLNJMAWCIY7NLIHDTBPJGKL:/var/lib/docker/overlay2/l/OQFFDK2B62MMBARCJW3
(00.012812) Error (proc_parse.c:1393): Bad format in 58717 mountinfo: '4N2SW4J:/var/lib/docker/overlay2/l/5EAMF56OQMVR5NPYNCI4XMYYZN:/var/lib/docker/overlay2/l/RIVBKA3FYBG66JNIKJYS4BEFZC:/var/lib/docker/overlay2/l/YR2VLI3OUX4YFXDOHKQDUBSSTI,upperdir=/var/lib/docker/overlay2/469d9765ffadd80b250f2f6b222a3e906bae9004a46357f8c17c529a3603957b/diff,workdir=/var/lib/docker/overlay2/469d9765ffadd80b250f2f6b222a3e906bae9004a46357f8c17c529a3603957b/work
'
(00.012828) Error (mount.c:2033): mnt: Can't parse 58717's mountinfo

どうやらoverlay2のようにイメージレイヤ数が多くなるにつれてmount情報の文字列が長くなる場合に生じる問題のようです。

TestCheckpoint fails on Docker overlay2 #1070

そして10月にリリースされたcriuのバージョン2.7でこの問題が修正されていました。

proc_parse: use the static buffer to parse mountinfo

CentOS 7 1611の criu-2.3-2.el7 にこのパッチを当てたものと差し替えると無事 jupyter/minimal-notebook コンテナを checkpoint/start できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0