如何在不杀死整个容器的情况下终止docker容器默认命令?
我正在运行一个包含节点服务器的docker容器。 我想附加到容器,杀死正在运行的服务器,并重新启动(用于开发)。 但是,当我杀死节点服务器杀死整个容器(可能是因为我杀了容器启动的过程)。
这可能吗? 这个答案有帮助,但是并没有解释如何杀死容器的默认进程而不杀死容器(如果可能的话)。
如果我想做的事情是不可能的,围绕这个问题的最好方法是什么? 添加command: bash -c "while true; do echo 'Hit CTRL+C'; sleep 1; done"
对于我的docker-compose中的每个图像,如链接答案的注释中所build议的,看起来不像理想解决scheme,因为它迫使我附加到我的容器后,他们是手动运行命令。
这是由Dockerdevise的。 每个容器应该是一个服务的无状态实例。 如果该服务中断,容器将被销毁。 如果该服务被请求/启动,则被创build。 如果你至less使用k8s,swarm,mesos,cattle等编排平台。
有一些应用程序代表PID 1而不是服务本身。 但这违背了微服务和容器的devise理念。 下面是一个可以作为PID 1运行的init系统的例子,它允许你随意的杀死和产生你的容器中的进程: https : //github.com/Yelp/dumb-init
为什么要重新启动节点服务器? 要应用从configuration文件或其他东西的变化? 如果是这样,你正在寻找一个方向错误的解决scheme。 您应该定义一个持久性卷,以便当容器重新生成时服务将重新读取所述configuration文件。
如果您需要重新启动运行容器的进程,那么只需运行一个:
docker restart $container_name_or_id
执行正常操作时不需要执行容器,可以考虑使用debugging工具。
而不是改变脚本运行自动重新启动,我会移动到docker引擎,所以它是可见的,如果你的容器崩溃:
docker run --restart=unless-stopped ...
当使用上述选项运行容器时,除非您有意在容器上运行docker stop
,否则泊坞窗将为您重启。
至于为什么杀死容器中的pid 1closures它,就像在linux服务器上杀死pid 1一样。 如果你杀了init / systemd,那么这个盒子就会掉下来。 在容器的名称空间内,类似的规则适用,不能更改。
- Docker保存问题
- 如何build立RabbitMQ与PHP代码连接,而DB,PHP等作为docker集装箱运行
- Docker路由/反向代理问题,不能curl其他容器
- 在Docker中debuggingDjango代码
- 如何编写一个kubernetes podconfiguration来启动两个容器
- Dockerized Mongo需要很长时间才能加载,然后不运行Mongo
- 在新的EC2 Jenkins Slave上首次执行Docker不起作用
- 未能build立:获取https://registry-1.docker.io/v2/microsoft/aspnetcore/manifests/1.1:未经授权:不正确的用户名或密码
- 什么时候会在Dockerfile中执行一个父图像的开始?