在Docker/Docker-Compose中,“down”和“rm”的区别是什么?

7

您可以将已关闭的内容“启动”,但如果您使用rm删除它则无法。 - tadman
@tadman:我刚刚测试了一下,那是不正确的。我可以使用 rm 然后 up 一个镜像。它会删除并重新创建镜像的容器,这与执行 down+up 是相同的,据我所知。 - BlueRaja - Danny Pflughoeft
您可能需要检查它是否删除了任何临时数据。 - tadman
2个回答

5
  • "docker-compose down": 停止并删除包括所有网络(但不包括卷)的容器,如果需要删除卷,应添加 -v 选项。
  • "docker-compose rm": 删除已停止的容器,但不会删除正在运行的容器,如果需要删除正在运行的容器,应添加 -s 选项。

现在,"docker-compose rm" 和 "docker rm" 的区别在于,当您更改 docker-compose.yml 文件中有关容器的信息时,在使用 "docker-compose rm" 删除旧的容器后,您无法删除由旧 docker-compose.yml 文件创建的容器,因此在这种情况下,您应该使用 "docker rm"。

如果您还不理解,可以尝试以下示例:

  1. 使用 "docker-compose up" 运行一个容器。
  2. 现在使用 "docker-compse stop" 停止容器,但不要移除它。
  3. 在 docker-compose.yml 中更改容器名称。
  4. 运行 "docker-compose up" --> 将创建具有新名称的新容器。
  5. 现在,如果您尝试使用 "docker-compose rm old_container_name" 删除旧容器,则会出现错误:No such service。
  6. 在这种情况下,您只能使用 "docker container rm old_container_name" 删除旧容器。

0

rm - 删除已停止的服务容器。

down - 停止容器并删除由 up 创建的容器、网络、卷和镜像。


3
是的,我在文档中读到了这些确切的句子,但我不理解它们之间的区别。你什么时候想使用其中一个而不是另一个?还有两个不同的 rm,它们有什么区别? - BlueRaja - Danny Pflughoeft
据我所知,就目前而言,我不认为rm之间有任何区别。实际上,有许多docker命令与docker-compose执行的操作相同。然而,down和rm之间的区别非常明显,如果你还不理解,请尝试删除正在运行的容器,然后再尝试down它。 - Shardj
让我们举个例子。假设您有大量的Docker服务(考虑到卷内的数据库),这些服务是静态的 - 您不想摆脱它们 - 但是您确实想要重建这些服务。在这种情况下,您可以使用rm而不是使用down来删除所有内容(包括卷,重新创建它们可能需要很长时间),这样您就可以使用新的up来使用这些卷。 - Omid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接