【问题标题】:Can I suspend and then resume a Docker container?我可以暂停然后恢复 Docker 容器吗?
【发布时间】:2020-05-19 20:01:43
【问题描述】:

我想暂停一个 Docker 容器并稍后恢复。如何才能做到这一点? 暂停是指它应该保存正在进行的进程的状态(例如视频编码),然后随时恢复。

【问题讨论】:

    标签: docker


    【解决方案1】:

    截至Version 0.12.0,Docker 支持PAUSEUNPAUSE 命令使用 cgroup freezer 暂停和恢复容器。

    【讨论】:

    • 当你冻结一个容器时,这是否意味着它不能再接受任何请求?当你向它发送请求时会发生什么?是否排队?掉线了?
    • @David Gageot:是否有可能克隆暂停的 docker 容器?
    • @noisy 我不知道。最近的解决方案是使用 CRIU criu.org/Docker
    • 这似乎不适用于 Windows 容器,仅适用于 Hyper-V 容器。 Error response from daemon: Cannot pause container f8c3.........: Windows: Containers cannot be paused
    【解决方案2】:

    AFAIK 现在不能用纯 docker 完成,但 lxc 支持。我和 docker 一起玩了一下,并确认这可以用 lxc-freeze -n <containtr.id> 并恢复运营 lxc-unfreeze -n <container.id> 但是在 v0.2.0 中,即使使用 -notrunc 和 lxc-ls 输出在我的系统上为空,docker ps 也只会缩短容器 ID(奇怪,需要阅读更多相关信息,因为 docker 使用带参数的普通 lxc-start,所以 lxc-ps应该打印这个)。我找到了带有lxc-ps 的完整容器ID。添加 docker freeze 命令会很好。也许是时候让我学习一些围棋了:)

    【讨论】:

    • 可以使用docker inspect $container获取长id。
    • 当使用 -notrunc 并且更改已经在 docker git master 分支中时,我添加了完整的容器 ID。不过谢谢你的提示。
    • 我发现,从 0.9 版开始,LXC 不再是 docker 的默认驱动程序 (blog.docker.com/2014/03/…)。但是有可能使用 lxc。为此,您必须杀死 docker 守护进程,然后使用开关 docker -d -e lxc 重新运行它
    【解决方案3】:

    命令:

    $ docker pause <containerName>
    $ docker unpause <containerName>
    

    这是他们的实际演示:

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      Docker 刚刚发布了一个(迄今为止)未记录的卷和数据存储功能集。 tl;dr 如果您使用-v 命令行选项,您可以指定一个路径以将容器外部映射到一个特殊的 docker 路径 (/var/lib/docker/volumes/{FULL_ID}),其中 FULL_ID 可以通过docker inspect container_id 找到。一个例子是docker run -d -v /data danielvf/myapp:1.0 runapp,它将/data目录外部化到一个docker卷中。

      https://github.com/dotcloud/docker/issues/111

      此功能的路线图:(尚未记录它的存在): https://github.com/dotcloud/docker/wiki/Volumes-&-persistent-data-storage

      【讨论】:

        猜你喜欢
        • 2021-11-25
        • 2020-10-18
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多