为什么 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) 但看起来他们都失去了动力。
我使用 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) 但看起来他们都失去了动力。