docker 运行容器时排除--rm标志的用例

z9smfwbn  于 2023-01-20  发布在  Docker
关注(0)|答案(1)|浏览(146)

docker container包括一个可选的--rm标志,其说明如下:
退出时自动删除容器
因此,包含--rm将在容器停止后删除容器,而不包含该标志将在容器停止后保留容器。
我发现自己每次启动容器时都会使用这个标志,事实上,我从来没有遇到过不需要--rm标志的用例。
根据Docker最佳实践,容器应该是短暂的,因此在容器停止后保留它似乎是一种反模式。
两个问题:
1.排除--rm标志是否是一种好的情况?
1.如果排除-rm标志如此罕见,那么为什么--rm不是默认行为?

    • 问题2假设**

我怀疑问题2的答案是基于Docker删除对象的保守方法。根据pruning docs
Docker采用保守的方法来清理未使用的对象(通常称为"垃圾收集"),例如映像、容器、卷和网络:这些对象通常不会被删除,除非您明确要求Docker这样做。
Docker可能不想删除对象并让用户感到惊讶,因为该操作无法撤消。

6ie5vjzr

6ie5vjzr1#

我通常使用--rm(容器退出时删除)或-d(后台运行)选项;几乎总是一个或另一个,但不是两者兼而有之。
假设您启动了一个非常典型的服务容器并返回

docker run -d -p 8080:3000 --net some-network myimage

你早上回来发现它已经退出了。
如果你也用--rm启动容器,容器的所有痕迹都会消失,你看不到它的退出状态,也不能查看它的docker logs,这是一个令人沮丧的恢复情况。
对于“一次性”容器,--rm可能是正确的。

# run database migrations, in the foreground, printing status
# to stdout; nothing to preserve here
docker run --rm --net some-network myimage \
  ./manage.py migrate

我不能说为什么有一个--rm选项,而不是一个--keep选项,但它一直是这样,只要我一直在使用Docker。

相关问题