每次我运行命令“docker-compose run web...”时,它都会导致另一个容器被添加到Kitematic中,因此每次运行docker-compose时,我都有一个容器列表,如“image-name_web_run_1”等。这是预期的行为吗?如果是,我该如何解决它?
k0pti3hp1#
这是预期的。您可以使用docker-compose run --rm在容器退出时将其删除。您可以使用docker-compose down或docker-compose rm -a清理这些旧容器。
docker-compose run --rm
docker-compose down
docker-compose rm -a
vlf7wbxs2#
你的意思是新容器吗?这是docker-compose run的预期行为,请参阅:https://docs.docker.com/compose/reference/run/你的意思是使用docker-compose exec吗?例如,docker-compose exec web /bin/sh参见:https://docs.docker.com/compose/reference/exec/
docker-compose run
docker-compose exec
docker-compose exec web /bin/sh
5gfr0r5j3#
我认为这里的问题是,一些用户希望在exec与run的开箱即用功能中有一些东西。docker-compose run建立了一个新的容器,然后需要清理它。docker-compose exec只适用于现有且正在运行的容器,如果容器未运行,则会出错。据我所知,没有一个命令或“一行程序”可以实现启动一个可能停止的容器并运行一个一次性命令的预期效果。如果你想避免创建一个新的容器,然后每次销毁它的费用,就像在接受的答案中建议的那样,使用--rm标志;正如X1 E0 F1 X的评论中所指出的。然后,您必须手动启动容器,然后运行exec以获得所需的效果。我建议使用以下串联命令:
exec
run
--rm
docker-compose start web; docker-compose exec web bin/rails c
注意:假设您在docker-compose文件中设置了依赖项,这些依赖项也将使用start命令启动。
start
3条答案
按热度按时间k0pti3hp1#
这是预期的。您可以使用
docker-compose run --rm
在容器退出时将其删除。您可以使用
docker-compose down
或docker-compose rm -a
清理这些旧容器。vlf7wbxs2#
你的意思是新容器吗?这是
docker-compose run
的预期行为,请参阅:https://docs.docker.com/compose/reference/run/你的意思是使用
docker-compose exec
吗?例如,docker-compose exec web /bin/sh
参见:https://docs.docker.com/compose/reference/exec/5gfr0r5j3#
我认为这里的问题是,一些用户希望在
exec
与run
的开箱即用功能中有一些东西。docker-compose run
建立了一个新的容器,然后需要清理它。docker-compose exec
只适用于现有且正在运行的容器,如果容器未运行,则会出错。据我所知,没有一个命令或“一行程序”可以实现启动一个可能停止的容器并运行一个一次性命令的预期效果。
如果你想避免创建一个新的容器,然后每次销毁它的费用,就像在接受的答案中建议的那样,使用
--rm
标志;正如X1 E0 F1 X的评论中所指出的。然后,您必须手动启动容器,然后运行
exec
以获得所需的效果。我建议使用以下串联命令:
注意:假设您在docker-compose文件中设置了依赖项,这些依赖项也将使用
start
命令启动。