【问题标题】:Docker - Cannot checkpoint containerDocker - 无法检查点容器
【发布时间】:2018-02-07 22:46:36
【问题描述】:

我正在尝试在忙箱图像中使用检查点。起初我创建了一个常规循环,然后打印数字。

docker run -d --name simple13 busybox /bin/sh -c "i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done"

docker logs -f simple13

然后我尝试通过以下命令使用检查点 -

docker checkpoint create simple13 checkpoint1

但是,它显示了一些像这样的错误 -

    Error response from daemon: Cannot checkpoint container simple13: 
docker-runc did not terminate sucessfully: CRIU version check failed: exec: 
"criu": executable file not found in $PATH path= 
/var/run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/2fd6f5b517
3fb75ee2793d50602506ee6bc97fcd49df93141846fec21f003be4/criu-dump.log: unknown

这里已经开启了实验。那么,您能告诉我我需要在这里做什么才能正确使用检查点吗?谢谢。

λ docker version
Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:05:22 2017
 OS/Arch:       windows/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:12:29 2017
  OS/Arch:      linux/amd64
  Experimental: true

【问题讨论】:

  • 你找到解决办法了吗?

标签: docker containers checkpoint


【解决方案1】:

bash 变量扩展有问题。通过CMD 的方式将继续打印空行,而不是数字。查看命令最终如何设置到容器中(结果部分来自docker container inspect ... 输出:

"Cmd": [
    "/bin/sh",
    "-c",
    "i=0; while true; do echo ; i=1; sleep 1; done"
], 

我稍微改变了引号的使用,下面的打印数字:

docker run -d --name simple13 busybox /bin/sh -c 'i=0; while true; do echo "$i"; i=$(expr "$i" + 1); sleep 1; done'

现在请注意 Cmd 结果与 docker container inspect simple13 的区别:

"Cmd": [
    "/bin/sh",
    "-c",
    "i=0; while true; do echo \"$i\"; i=$(expr \"$i\" + 1); sleep 1; done"
],

关于docker checkpoint create simple13 checkpoint1 错误:

对我来说,用了之后就解决了:

sudo apt-get install criu

但我认为,它仍然无法正常工作。示例:

ubuntu@ubuntu:~$ docker run -d --name simple13 busybox /bin/sh -c 'i=0; while true; do echo "$i"; i=$(expr "$i" + 1); sleep 1; done'
1ffd1f30aec96e07ac7c229c581b7ccd5feb9d180602eeb663211189abc652e4
ubuntu@ubuntu:~$ docker logs simple13 
0
1
2
3
ubuntu@ubuntu:~$ docker checkpoint create simple13 checkpoint1
checkpoint1
ubuntu@ubuntu:~$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
1ffd1f30aec9        busybox             "/bin/sh -c 'i=0; wh…"   19 seconds ago      Up 18 seconds                           simple13
ubuntu@ubuntu:~$ docker logs simple13 
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ubuntu@ubuntu:~$ docker checkpoint ls simple13
Error response from daemon: open /var/lib/docker/containers/1ffd1f30aec96e07ac7c229c581b7ccd5feb9d180602eeb663211189abc652e4/checkpoints/checkpoint1/config.json: no such file or directory

【讨论】:

  • 正确。 criu 包必须安装在 Docker 服务器上。
猜你喜欢
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2019-04-28
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
相关资源
最近更新 更多