Linux docker容器以分离模式启动,在进程执行后停止

Linux docker容器以分离模式启动,在进程执行后停止,linux,docker,Linux,Docker,我使用以下命令在分离模式下创建docker容器: docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh" 所以我需要在创建容器时执行“/opt/init.sh”。我所看到的是,在脚本执行完毕后,容器被停止 如何在容器创建时使用脚本/服务执行分离容器启动?Docker容器将在其主进程结束时退出。在本例中,这意味着当init.sh结束时。如果您仅尝试启动单个应用程序,则可以在最后使用e

我使用以下命令在分离模式下创建docker容器:

docker run [OPTIONS] --name="my_image" -d container_name /bin/bash -c "/opt/init.sh"
所以我需要在创建容器时执行“/opt/init.sh”。我所看到的是,在脚本执行完毕后,容器被停止


如何在容器创建时使用脚本/服务执行分离容器启动?

Docker容器将在其主进程结束时退出。在本例中,这意味着当
init.sh
结束时。如果您仅尝试启动单个应用程序,则可以在最后使用
exec
启动它,确保在前台运行它。使用
exec
将有效地将被调用的服务/应用程序转换为主进程


如果要启动多个服务,最好使用流程管理器,例如
supervisord
runit
。您需要在前台启动process manager守护程序。Docker文档包括一个。

运行Docker容器有两种模式

  • 分离模式-此模式用于执行命令,并在命令完成后终止容器
  • 前台模式-此模式可以运行bashshell,但也可以在退出shell后终止容器
  • 你需要的是背景模式。参数中没有给出这一点,但有很多方法可以做到这一点

  • 在分离模式下运行无限命令,使命令永远不会结束,容器永远不会停止。我通常使用“tail-f/dev/null”仅仅是因为它很轻,而且大多数linux映像中都存在/dev/null
  • docker run-d--name=name容器尾部-f/dev/null

    然后,您可以像下面这样进入正在运行的容器:

    docker exec-it名称/bin/bash-l

    如果您使用-l参数,它将以登录模式登录,该模式将像普通的bash登录一样执行.bashrc。否则,您需要在内部手动再次重击

  • Entrypoint-您可以创建任何sh脚本,如/Entrypoint.sh。在entrypoint.sh中,您还可以运行任何永无止境的脚本
  • #!/垃圾箱/垃圾箱

    #/entrypoint.sh

    服务mysql重启


    tail-f/dev/null这就是我需要在分离/后台模式下运行它的原因。使用“daemontools”怎么样。有人用过吗?对我的案子有用吗?“我需要运行它”中的“它”是什么意思?使用我刚才描述的流程运行分离的容器没有问题。正常的解决方案是使用流程管理器,Docker似乎倾向于supervisord。我注意到Docker在FAQ中也提到了守护程序工具:对不起,这种方法如何在Windows Docker容器上工作?