为什么docker-compose容器在完成命令后仍然活着?

我使用docker-compose来开发django应用程序:我有一个相当简单的设置 – 一个用于Web服务的服务和一个用于数据库的服务。 有时我需要通过docker运行manage.py命令。

我使用以下命令:

$ docker-compose run web ./manage.py migrate 

这工作得很好。 但问题是,即使在命令完成之后,docker仍然保留容器:

 $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------ seeder_data_1 sh Exit 0 seeder_postgres_1 /docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp seeder_web_1 fab run_local Up 0.0.0.0:8000->8000/tcp seeder_web_run_14 ./manage.py migrate Up $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 61d3aee5bb39 seeder_web "./manage.py migrate" 4 minutes ago Restarting (2) 55 seconds ago seeder_web_run_14 85e91cb9383c seeder_web "fab run_local" 5 minutes ago Up 5 minutes 0.0.0.0:8000->8000/tcp seeder_web_1 565b01dedb7b postgres:latest "/docker-entrypoint.s" 5 minutes ago Up 5 minutes 0.0.0.0:5432->5432/tcp seeder_postgres_1 

这很烦人:我不想拥有大量只用于一个命令的僵尸容器。 命令返回后,如何自动结束机器? 我知道我可以手动杀死,但这是一种烦人的。

还是有一些背后的逻辑?

听起来就像你想为--rm标志docker-compose run : https : --rm 。 已经提到了几次使它成为默认( https://github.com/docker/compose/issues/2774和https://github.com/docker/compose/issues/943 ),但看起来像他们两个失去了蒸汽。