为什么 docker-compose 容器在完成命令后仍保持活动状态?

Why do docker-compose containers stay alive after finishing up command?

我使用 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

这很烦人:我不想拥有大量仅用于一个命令的僵尸容器。有什么方法可以在命令 returns 后自动结束机器?我知道我可以手动杀死,但这有点烦人。

或者这背后有什么逻辑吗?

听起来你想要 docker-compose run--rm 标志:https://docs.docker.com/compose/reference/run/. It has been mentioned a couple times to make it a default (https://github.com/docker/compose/issues/2774 and https://github.com/docker/compose/issues/943) 但看起来他们都失去了动力。