如何 return 一个容器在 docker compose 中变成一个干净的状态?

How to return one container to a clean state in docker compose?

使用 docker-compose restart <service> 保留容器的一些持久状态(例如,它不会从 postgres alpine 容器中删除数据库表,大概是因为在该图像内部定义了一个持久卷 somewhere,即使未在 docker-compose.yaml) 中提及。

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

如何 return 将一个容器变成新鲜状态?

使用 docker-compose down and up 无法刷新单个容器,但使用 docker-compose restart <service name> 可以重新启动单个服务。

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

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

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

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

相比之下,如果您只是尝试 docker-compose restart <service>,那么任何现有的匿名卷都将被保留(即进程将重新启动,但容器的内部存储状态可以持续存在)。据推测,如果该容器的源代码发生任何变化,docker-compose build <service> && docker-compose restart <service> 会起作用。

更简洁的替代方法是:

docker-compose up -V -d <service>

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