【问题标题】:How to return one container to a clean state in docker compose?如何在 docker compose 中将一个容器恢复为干净状态?
【发布时间】:2021-09-28 22:46:12
【问题描述】:

使用docker-compose restart <service> 会保留容器的一些持久状态(例如,它不会从 postgres alpine 容器中删除数据库表,可能是因为在该映像内部定义了持久卷 somewhere,即使在 @987654323 中没有提及@)。

使用例如docker-compose down && docker-compose up -d所有容器返回到新状态。

如何将一个容器恢复到新状态?

【问题讨论】:

    标签: docker-compose docker-volume


    【解决方案1】:

    使用 docker-compose 重新创建一个新的服务:

    docker-compose rm -svf <service> && docker-compose up -d <service>
    

    当您移除容器时,-v 指示同时从存储中逐出任何附加到它的匿名卷。如果您省略此-v,那么您将累积未使用的卷,随后需要运行docker volume prune 来清理这些卷。 -s 只是一个快捷方式,而不是事先输入docker-compose stop &lt;service&gt;-f 避免提示确认yes

    作为比较,如果您只是尝试docker-compose restart &lt;service&gt;,那么任何现有的匿名卷都将被维护(即进程将重新启动,但容器的内部存储状态可以保持)。假设docker-compose build &lt;service&gt; &amp;&amp; docker-compose restart &lt;service&gt; 会在该容器的源发生任何更改时起作用。

    更简洁的替代方法是:

    docker-compose up -V -d &lt;service&gt;

    确实重新创建了一个特定的服务,即使这些服务已经启动了; -V(也可以表示为--renew-anon-volumes)意味着创建新的匿名卷,而不是从预先存在的容器中检索那些。但是,它会保留以前的卷,直到随后的修剪。

    【讨论】:

      【解决方案2】:

      使用docker-compose down and up 不能刷新单个容器,但使用docker-compose restart &lt;service name&gt; 可以重启单个服务。

      请查看 compose cli 参考:https://docs.docker.com/compose/reference/

      【讨论】:

      • 这并没有解决问题。您如何重新创建与该单一服务关联的卷?
      • @benjimin 您无法使用 docker-compose 重新创建单个服务。
      猜你喜欢
      • 2014-03-04
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多