使用Docker Compose创建一个终止容器

8
我有一个docker-compose设置,包括一个数据库容器、一个应用程序容器和一个预先加载数据库必要数据的容器。
我希望在使用 "docker-compose up" 启动所有容器时,在预加载容器完成工作后使用 "exit 0" 终止它。
但是,终止该容器会导致完整的设置崩溃,并显示以下消息:
composesetup_load_1 exited with code 0
Gracefully stopping... (press Ctrl+C again to force)
Stopping composesetup_app_1...
Stopping composesetup_db_1...

有没有办法在一个docker-compose设置中拥有多个具有不同生命周期的容器?如果有,要怎么做呢?

2个回答

8

目前我的解决方法是在入口脚本的末尾添加 tail -f /dev/null,以保持预加载容器的运行。这样做可以让进程一直运行,但实际上并没有发生任何事情。


这是一种常见的方法吗?有没有“正确”/“官方”的做法?不管怎样,我喜欢这个巧妙的解决方案。 - IcyFlame
这个,非常感谢。 - Pricey
1
聪明,但最好使用 sleep inf - inetknght

-1

docker-compose up -d 中使用 -d 选项 将以分离模式运行进程。这样可以避免使用 Ctrl+C 杀死服务,从而停止容器。

注意:我假设您是通过消息 "Gracefully stopping... (press Ctrl+C again to force)" 中的 Ctrl+C 来终止进程的。


1
不,我没有使用Ctrl+C终止进程,进程只是完成了它的工作,因此以exit 0的方式终止。因此,使用-d选项运行docker-compose并不是解决方案。 - white_gecko
1
@white_gecko,好的,谢谢你澄清。那么行为就像设置了 --abort-on-container-exit 标志一样? - atfornes
1
好的,也许这个标志是一个解决方案...当我发布问题时,至少这种行为是默认的。 - white_gecko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接